2017-01-26 7 views
0

Django 1.10でブログ/ポートフォリオのハイブリッドWebサイトを構築しています。 Mysiteに加えて、ブログとポートフォリオという2つのアプリがあります。ブログ/テンプレート内/ブログとポートフォリオ(最新の15のブログ記事と5つの最新のポートフォリオプロジェクト)のコンテンツを表示するindex.htmlがあります。Djangoマルチレベルの拡張が表示されない

だから、index.htmlページは次のようになります。あなたは、データが表示されない見ることができるように

http://imgur.com/y2UqBSS

。ただし、ブログページとポートフォリオページに移動すると表示されます。たとえば、ブログのページ:

http://imgur.com/7P922Ga

私はこの問題はMULTレベルに関連していることを把握しています私が起こっていることを拡張します。ブログとポートフォリオの両方のページにはデータベースのコンテンツが表示されるため、モデルはO.Kだと思うが、何かがビュー上にある。 index.htmlはbase_generic.htmlテンプレートを拡張し、recent_blog_posts.htmlとrecent_portfolio_pieces.htmlはindex.htmlを拡張します。

この問題を解決する方法がわかりません。私が間違っていることを示唆している?

プロジェクト構造

mysite/ 
---blog/ 
------static/ 
---------css/ 
---------images/ 
------------blogpostimages/ 
------------favicon.ico 
------templates/ 
---------blog/ 
------------blog_post.html 
------------blog_list.html 
------------recent_blog_posts.html 
---------base_generic.html 
---------index.html 
---------bio.html 
---------resume.html 
------admin.py 
------apps.py 
------models.py 
------tests.py 
------urls.py 
------views.py 
---portfolio/ 
------static/ 
---------css/ 
---------images/ 
------------portfoliopieceimages/ 
------templates/ 
---------portfolio/ 
------------portfolio_piece.html 
------------portfolio_list.html 
------------recent_portfolio_pieces.html 
------admin.py 
------apps.py 
------models.py 
------tests.py 
------urls.py 
------views.py 
---mysite/ 
------settings.py 
------urls.py 
------wsgi.py 
manage.py 
db.sqlite3 
requirements.txt 

ブログ/ views.py

from django.shortcuts import render 
from django.views import generic 

# Create your views here. 

from .models import Blog 


def index(request): 
    """ 
    View function for home page of site. 
    """ 
    # Generate most recent blog post 

    title = Blog.objects.all() 
    post_date = Blog.objects.all() 
    get_absolute_url = Blog.objects.all() 
    # Render the HTML template index.html with the data in the context variable. 

    return render(
      request, 
     'index.html', 
    context={'title': title, 
       'post_date': post_date, 
       'get_absolute_url': get_absolute_url, 
       } 
) 


def recent_blog_posts.html(request): 
    blog = Blog.objects.order_by('-post_date')[0:11] 
    return render(request, 'index.html', {'blog': blog}) 


class BlogListView(generic.ListView): 
    """ 
    Generic class-based view for a list of blog posts. 
    """ 
    model = Blog 
    paginate_by = 20 

    def get_queryset(self): 
     return Blog.objects.order_by('-post_date') 


class BlogDetailView(generic.DetailView): 
""" 
Generic class-based detail view for a blog post. 
""" 
model = Blog 


def bio(request): 
return render(
    request, 'bio.html' 
) 


def resume(request): 
return render(
    request, 'resume.html' 
) 

index.htmlを

<div> 

<h2>Recent Blog Posts</h2> 

     <div> 

      {% block blogs %} 


      {% if blog_list %} 

       {% for blog in blog_list %} 
       <article> 
        <header> 
         <h4><small>{{blog.post_date}} » </small><a href="{{ blog.get_absolute_url }}">{{ blog.title }}</a></h4> 
        </header> 
       </article> 
       {% endfor %} 

      {% else %} 
       <p>Unfortunately, there are no blog posts yet.</p> 
      {% endif %} 

     </div> 
{% endblock %} 

    </div> 


    <div> 

     <h2>Portfolio</h2> 

     {% if portfolio %} 

       {% for portfolio in portfolio %} 
       <div class="col-xs-12 col-sm-6 thumb"> 
        <a class="thumbnail" href="{{ portfolio.get_absolute_url }}"> 
         {% load static %} 
         <img class="img-responsive" src="{{ portfolio.cover_image }}" alt=""> 
         <p>{{ portfolio.title }}</p> 
         <p>{{ portfolio.client_name }}</p> 
        </a> 
       </div> 
       {% endfor %} 

      {% else %} 
     <div> 
      <p>Unfortunately, there are no portfolio pieces yet.</p> 
     </div> 

      {% endif %} 
+0

あなたのテンプレートでは 'blog_list'コンテキスト変数を使用しています。しかし、あなたのインデックスビューでは、コンテキストリターンはこの変数を含んでいません。 title、post_date、およびget_absolute_urlがあります。このテンプレートの変数 'portofolio'も同じです。 PS:コードplsの字下げを修正しました – Wilfried

+0

@Wilfriedありがとうございました!これはうまくいきました。あなたがそれを答えに変えれば私はそれを選択します – cssidy

+0

完了。あなたを助けてうれしい。そして、厳密になる。それは良い開発者の資産です;) – Wilfried

答えて

0

あなたはVAを使用する必要があります。あなたの文脈に、あなたのテンプレートの中で妥協しないでください。 したがって、変数blog_listをコンテキストに渡して、テンプレート内で反復処理する必要があります。

以下の実施例:(のみblog_list用)

def index(request): 
    """ 
    View function for home page of site. 
    """ 
    blog_list = Blog.objects.all() 
    # Render the HTML template index.html with the data in the context variable. 
    return render(request, 'index.html', context={'blog_list': blog_list}) 
0

あなたはコンテキストでテンプレートにデータを渡す必要があります。私は本当にあなたがコンテキストで変数を設定して渡すことでインデックスで何をしようとして理解していない:

# Generate most recent blog post 

title = Blog.objects.all() 
post_date = Blog.objects.all() 
get_absolute_url = Blog.objects.all() 

Blog.objects.all()全てのブログのインスタンスでクエリセットを返し、 1つのブログインスタンスのtitle/post_date/get_absolute_urlではありません。

テンプレートでは、2つのコンテキスト変数blog_listとportfolioを参照します。 インデックスの変数は設定しないでください。私はまた、そのような声明を避けるだろう:

{% for portfolio in portfolio %} 

ポートフォリオまたはportfolio_listに後者を変更、あなたが反復処理変数と同じ変数名を使用しないでください。

{% for portfolio in portfolio %} 

のindex.htmlファイルの変更で

def index(request): 
    blog_list = Blog.objects.all() 
    portfolio_list = Portfolio.objects.all() 
    return render(request, 'index.html', 
    context={'blog_list': blog_list, 'portfolio_list': portfolio_list} 
) 

index.py:それはあなたがこれを試みる場合があります動作させるために

{% for portfolio in portfolio_list %} 
+0

あなたは何を意味するか分かります。私はちょうどあなたの提案を実装しようとしたが、私はそれが動作する前に行ういくつかのdbの調整があると思う。私が繰り返す変数と同じ変数名を使うのが悪いのはなぜか分かりますか? (私はDjangoとPythonの初心者です) – cssidy

+0

テンプレートでどのように動作するのかよく分かりませんが、Pythonコードでは、ループが終了した後、ポートフォリオ変数の値を最後の反復値に変更します。 –

関連する問題