2017-07-25 13 views
2

ブログの基本的な開始点は、header.htmlから拡張されたpost_list.htmlのデータベースのブログ記事をリストアップしています。ヘッダーの変数をスローガンとして取得しようとしていますが、これは機能しません。Django変数がヘッダーセクションに表示されない

header.html - これは管理ページから入力したコンテンツを持っているさ「propaganda.slogan」なしでレンダリング:

<!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    <title>hey!</title> 
    <meta charset="utf-8" /> 
    {% load staticfiles %} 
    <link rel="stylesheet" href="{% static 'blog/css/bulma.css' %}"  type="text/css"/> 
    </head>  
    <body> 
    <section class="hero is-success is-bold"> 
     <div class="hero-body"> 
      <div class="container"> 
       {% block slogan %} 
        <ul> 
        {% for propaganda in propagandas %} 
         <li>{{ propaganda.slogan }}</li> 
        {% endfor %} 
        </ul>  
       {% endblock %} 
       <h1 class="title"> 
        My weblog 
       </h1> 
      </div> 
     </div> 
    </section> 
    {% block content %} 
    {% endblock %} 
</body> 
</html> 

post_list.htmlはheader.htmlを拡張したモデルからの投稿の一覧が表示されます.py:

{% extends "blog/header.html" %} 
{% block content %} 
    {% for post in posts %} 
     <section class="section"> 
      <div class="container"> 
       <h1 class="title"><a href="#">{{ post.title }}</a></h1> 
       <p>{{ post.summary|linebreaksbr }}</p> 
       <p>published: {{ post.last_edited }}</p> 
      </div> 
     </section> 
    {% endfor %}  
{% endblock %} 

models.pyは次のようになります。最後に

from django.db import models 
from django.utils import timezone 

# Create your models here. 
class Propaganda(models.Model): 
    slogan = models.CharField(max_length=140, blank=True, null=True) 

    def __str__(self): 
     return self.slogan 


class Post(models.Model): 
    title = models.CharField(max_length=140, blank=False, null=False) 
    content = models.TextField() 
    summary = models.CharField(max_length=500) 
    created_date = models.DateTimeField() 
    last_edited = models.DateTimeField() 

    def __str__(self): 
     return self.title 

、views.p yは次のとおりです。

from django.shortcuts import render 
from .models import Post, Propaganda 

# Create your views here. 
def post_list(request): 
    posts = Post.objects.all() 
    return render(request, 'blog/post_list.html', {'posts': posts}) 

def header(request): 
    propagandas = Propaganda.objects.all() 
    return render(request, 'blog/header.html', {'propagandas': propagandas}) 

は、なぜ私はpost_list.htmlにポストのタイトル、概要、および日付のリストを取得することができますが、私は、ヘッダーに宣伝スローガンのリストを取得することはできませんか?

私には、それはほとんど同じコードのように見えますか?

私はdevのサーバーから、または、ブラウザにエラーを取得していない:(

答えて

2

あなたは現在のテンプレートのコンテキストにpropagnadasのリストを渡す必要があります。テンプレートを含むがで行うにはほとんど、あるいは何もしています関連する(これは最初の場所で任意の理にかなっている場合)が含まれたテンプレートのビュー:

def post_list(request): 
    posts = Post.objects.all() 
    propagandas = Propaganda.objects.all() 
    return render(request, 'blog/post_list.html', {'posts': posts, 'propagandas': propagandas}) 
+0

は、私が取得していますと、現在のテンプレートは「post_list」である理由あなたは私に説明することができ、これは働いていた、ありがとうヘッダー "header.html"の変数の値は?私はテンプレートがヘッダーテンプレートだと思っていたでしょう。 e私はpost_listのためにヘッダーの後ろで開始されるビューを持っていますが、それにスローガンを加えてヘッダに現れます!あなたはすぐにエラーをキャッチしたが、私には意味をなさない。私は1つのファイルであるビューを構築しているようで、views.pyで単一のビューを作成すると、ヘッダ内のオブジェクトを取得できますか? –

+2

['include'](https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#include):*テンプレートを読み込み、**現在のコンテキスト**でレンダリングします。*現在のコンテキストは 'post_list'ビューによって提供されています。これは今までは宣伝のリストを提供していません。インクルードされたテンプレートは、別のビューを持っているとは思わないでください。 –

関連する問題