2016-05-27 7 views
-1

子テンプレートに拡張された汎用テンプレートを作成しようとすると問題が発生します。Djangoのコンテンツブロックを使用するテンプレート

Post.html

{% extends "blog\blog_base.html" %} 
{% block title %} The Blog {% endblock %} 

{% block menu %} 
{% endblock %} 

<h1>The Blogs Index Page</h1> 

{% block content %} 
    <h2> Posts </h2> 
    {% for post in latest_post_list %} 
    <h3> {{ post.title }} </h3> 
     <p> {{ post.body|linebreaks }} </p> 
    {% endfor %} 
{% endblock %} 

blog_base.html

<body> 
{% block menu %} 
{% for menu in menu %} 
    {{ menu.page_name }} 
{% endfor %} 
{% endblock %} 
    <div class = "content"> 
    {% block content %} <p> Place Holder </p> {% endblock %} 
    </div> 
</body> 

コンテンツ作品のブロック。

メニューのブロックは、menuオブジェクトのpage_nameプロパティを表示しません。

しかし、私が挿入した場合 - >ストレートPost.htmlテンプレートに

{% for menu in menu %} 
    {{ menu.page_name }} 
{% endfor %} 

は、それが動作します。ああ、自動的にメニューをリストにして、私を混乱させます。なぜそれは箇条書きでリストを作成し、各メニューオブジェクトをそれ自身の行に印刷するだけではないのですか?

答えて

1

ブロックタグをPost.htmlに含めると、基本テンプレートのメニューが上書きされます。投稿テンプレートから次のものを削除してください:

{% block menu %} 
{% endblock %} 
+0

子テンプレートにブロックを定義する唯一の方法は、親テンプレートが提供するものとは異なるコンテンツが必要な場合です。 –

+0

正確に。基本テンプレートにあるものに**を追加するには、['{%block.super%}'](https://docs.djangoproject.com/ja/dev/ref/templates/)を使用します。言語/#テンプレート継承) – rnevius

関連する問題