Jinja2 Наследование с блоками и включает - PullRequest
18 голосов
/ 12 февраля 2012

Я не могу понять, как изменить блоки из включенных шаблонов, используя Jinja2. Вот пример, где я использую три файла.

base.html:

<html>{% include "content.html" %}</html>

content.html:

<h1>{% block title %}Title{% endblock title%}</h1>
<div>{% block content_body %}Content Body{% endblock content_body%}</div>

story.html

{% extends "base.html" %}
{% block title %}story.title{% endblock title %}
{% block content_body %}story.description{% endblock content_body %}

При рендеринге story.html я получу:

<html>
<h1>Title</h1>
<div>Content Body</div>
</html>

Как бы я сделал с ожидаемыми значениями?

1 Ответ

13 голосов
/ 12 февраля 2012

base.html не отображается, поскольку не вызывается ни одним шаблоном. То, что вы могли бы сделать, это второй уровень расширения:

base.html:

<html>{% block html %}{% endblock %}</html>

content.html:

{% extends "base.html" %}
{% block html %}
<h1>{% block title %}Title{% endblock title%}</h1>
<div>{% block content_body %}Content Body{% endblock content_body%}</div>
{% endblock %}

Тем не менее, это, вероятно, излишне, вы, вероятно, обнаружите, что достаточно одного базового шаблона (т.е. объедините base.html и content.html в один шаблон).

...