Jinja: Как работает резервный пример с нулевым мастером? - PullRequest
4 голосов
/ 03 марта 2012

Пример кода с официального сайта jinja:

{% if not standalone %}{% extends 'master.html' %}{% endif -%}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>{% block title %}The Page Title{% endblock %}</title>
<link rel="stylesheet" href="style.css" type="text/css">  
{% block body %}
  <p>This is the page body.</p>
{% endblock %}

Насколько я понимаю, когда standalone равен true, печатается следующий код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>{% block title %}The Page Title{% endblock %}</title>
<link rel="stylesheet" href="style.css" type="text/css">  
{% block body %}
  <p>This is the page body.</p>
{% endblock %}

И когда standalone равен false, это напечатано:

{% if not standalone %}
 <<master.html's code>>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>{% block title %}The Page Title{% endblock %}</title>
<link rel="stylesheet" href="style.css" type="text/css">  
{% block body %}
  <p>This is the page body.</p>
{% endblock %}

Это кажется очень странным.Я явно упускаю что-то очевидное, что это?

1 Ответ

5 голосов
/ 04 марта 2012

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

Так что в автономном режиме:

{% if not standalone %}
{% only care about blocks also in "master.html" %}
{% endif %}
{# Everything below is ignored #}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>{# The following will be rendered if master has a block named title. #}
{% block title %}The Page Title{% endblock %}
{# All the following will be ignored #}</title>
<link rel="stylesheet" href="style.css" type="text/css">
{# This *may* be rendered, if master.html has a block named "body" #}
{% block body %}
  <p>This is the page body.</p>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...