Jinja2范围问题与块和包括

时间:2015-12-10 17:41:46

标签: variables scope jinja2

这是一个简单的模板结构,由三个文件组成:

wrapper.html,定义页面的基本结构。它有一些可以扩展的块。

<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="utf-8">
        <script type="text/javascript" src="/something.js"></script>
        <link rel="stylesheet" type="text/css" href="/style.css">

        <title>{{ title }}</title>
    </head>
    <body>
        {% block header %}
        {% endblock %}

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

main.html是我给jinja2格式化的文件。

{% extends "wrapper.html" %}
{% set title = title | default("Untitled") %}

{% block header %}
    <h1>Welcome to {{ title }}</h1>
{% endblock %}

{% block body %}
    {% include "included.html" %}
{% endblock %}

included.html有一些额外的东西,我不想因为某种原因而放入main.html

<p>In this page ({{ title }}), we will discuss all kinds of things.</p>
<p>Blah blah blah...</p>

我的问题是,当错过一个标题时,一切都充满了&#34;无标题&#34;除了一个地方:included.html文件。 我找到了两种方法来解决这个问题。

  1. {% set title = title %}的{​​{1}}内添加{% block body %}(什么?为什么会这样?)
  2. main.html移至{% set title = title | default("Untitled") %}
  3. 我不喜欢这两种选择。第一个是出于显而易见的原因,第二个是因为我可能希望以多种方式扩展wrapper.html和&#34;无标题&#34;可能并不总是无标题页面的最佳选择。

    所以我的问题是:我有什么方法可以让wrapper.html识别included.html中未在块范围内直接定义的变量?
    我还想知道我是否错误地使用了Jinja2。

0 个答案:

没有答案