У меня есть приложение Django (1.6), которое наследует базовый шаблон. Я хотел бы включить одну из моих (в настоящее время работающих) flatpages в целевую страницу приложения, что-то, что Django docs say is possible.Шаблон шаблона Django flatpages не работает с наследованием шаблона
Вот мой шаблон:
{% 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 %}
Это не список любого из flatpages. Тем не менее, если я удалю {% 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>
Все работает. Я вижу количество flatpages в моем fp
объекте (9), а мой неупорядоченный список отображает все URL-адреса и заголовки.
Мне кажется, что это ошибка в том, как работают flatpages или как Django наследует шаблоны.
Базовый шаблон (/path/to/base.html
) не имеет в нем ничего сложного.
Django categorically says that this is possible:
При загрузке пользовательских тегов или фильтр библиотеки, теги/фильтры только доступны на текущий шаблон - не какие-либо родительские или дочерние шаблоны по пути шаблонов наследования.
Например, если шаблон foo.html имеет {% load humanize%}, то дочерний шаблон (например, тот, который имеет {% extends "foo.html"%}), не будет иметь доступа к шаблону гуманизации теги и фильтры. Детский шаблон отвечает за свой {% load humanize%}.
Это функция для удобства и разумности.
Кто-нибудь еще заметил эту ошибку? Это исключение только для встроенного приложения flatpages?
EDIT 1:
Daniels ответ является правильным. example code from the Django docs не показывает в том числе содержание flatpage внутри {% block %}
, так что я не ожидал, что это должно было быть сделано:
{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
{% for page in flatpages %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
Моя вина, я думаю. Живи и учись.
Hi Daniel - Спасибо! Это сработало. Странно, что документация Django прямо не говорит об этом, или, может быть, я просто плотный ... – tatlar