【问题标题】:Fill a block of parent template from included child template从包含的子模板填充父模板块
【发布时间】:2014-04-12 12:21:05
【问题描述】:

我刚开始使用 jinja2 模板库。我不知道如何从包含的子模板中填充父模板块中的内容。 例如我有一个父模板-

t-1:

<div id="includedTemplateName>
    {% block includedTemplateName %}{% endblock %}
</div>

<div id="content">
    {% include 't-2.htm' %}
</div>

和子模板

t-2:

<div>
conten
</div>
{% block includedTemplateName %}t-2{% endblock %}

我希望 id 为 includedTemplateName 的 div 中的值是 t-2 中定义的“t-2”。 如何使用 jinja2 实现这一目标?

【问题讨论】:

    标签: python jinja2


    【解决方案1】:

    您将include 语句与模板继承混淆了。 include 语句对于包含一个模板并将该文件的渲染内容返回到当前命名空间很有用(来自Jinja2 docs)。您的“子”模板在包含时已被渲染,因此无法更改父模板中的值。

    您需要使用template inheritance

    t1.html:

    <div id="includedTemplateName">
        {% block includedTemplateName %}{% endblock %}
    </div>
    
    <div id="content">
        {% block content %}{% endblock %}
    </div>
    

    t2.html:

    {% extends "t1.html" %}
    {% block includedTemplateName %}t-2{% endblock %}
    {% block content %}content{% endblock %}
    

    来自the Jinja2 docs

    {% extends %} 标签是这里的关键。它告诉模板 这个模板“扩展”另一个模板的引擎。当。。。的时候 模板系统评估这个模板,首先它找到父模板。 extends 标签应该是模板中的第一个标签。一切 在正常打印出来之前可能会造成混乱。

    【讨论】:

      猜你喜欢
      • 2014-12-19
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多