基本テンプレートを継承する Django (1.6) アプリケーションがあります。私の(現在作業中の)フラットページの1つをアプリケーションのランディングページに含めたいと思います.Djangoのドキュメントは可能だと言っています.
ここに私のテンプレートがあります:
{% extends "path/to/base.html" %}
{% load flatpages %}
{% get_flatpages as fp %}
{% block content %}
<h3>Flatpage inclusion</h3>
<p>Number of flatpages: {{ fp|length }}
<ul>
{% for page in fp %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
{% endblock content %}
これはフラットページをリストしません。ただし、{% extends %}
シグナルを削除すると、コードは次のようになります。
{% load flatpages %}
{% get_flatpages as fp %}
<h3>Flatpage inclusion</h3>
<p>Number of flatpages: {{ fp|length }}
<ul>
{% for page in fp %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
すべてが機能します。オブジェクト内のフラットページの数fp
(9) が表示され、順序付けされていないリストにすべてのフラットページの URL とタイトルが表示されます。
これは、フラットページがどのように機能するか、または Django がテンプレートの継承をどのように行うかのバグのように私には思えます。
基本テンプレート ( /path/to/base.html
) には、複雑なものは何もありません。
カスタム タグまたはフィルター ライブラリをロードすると、タグ/フィルターは現在のテンプレートでのみ使用可能になります。テンプレート継承パスに沿った親または子テンプレートは使用できません。
たとえば、テンプレート foo.html に {% load humanize %} がある場合、子テンプレート (たとえば、{% extends "foo.html" %} を持つテンプレート) は humanize テンプレート タグとフィルターにアクセスできません。子テンプレートは、独自の {% load humanize %} を担当します。
これは保守性と健全性のための機能です。
他の誰かがこのバグに気づきましたか? 組み込みの flatpages アプリだけの例外ですか?
編集1:
ダニエルの答えは正しいです。Django docsのサンプル コードでは、フラットページ コンテンツを 内に含めることが示さ{% block %}
れていないため、これを行う必要があるとは思っていませんでした。
{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
{% for page in flatpages %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
私のせいだと思います。生活し、学びます。