Jinja: Как работает резервный пример с нулевым мастером?

Пример кода с официального сайта 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 %}

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


person mickey06    schedule 03.03.2012    source источник


Ответы (1)


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

Итак, в автономном режиме:

{% 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 %}
person Sean Vieira    schedule 04.03.2012