2

基本テンプレートを継承する 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) には、複雑なものは何もありません。

Djangoは、これが可能であると断言しています:

カスタム タグまたはフィルター ライブラリをロードすると、タグ/フィルターは現在のテンプレートでのみ使用可能になります。テンプレート継承パスに沿った親または子テンプレートは使用できません。

たとえば、テンプレート 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>

私のせいだと思います。生活し、学びます。

4

2 に答える 2

3

問題は、get_flatpagesタグが親テンプレートのブロックの外側にあることです。つまり、単に呼び出されないということです。

それをコンテンツブロックに移動すると、機能するはずです。

于 2014-09-25T21:08:49.913 に答える