如何扩展jinja块模板并多次使用

use*_*195 3 html jinja2

Base.html 扩展到 create.html

基本文件

{% block title %}Index{% endblock %}
{% block body %} 
<h1>Index</h1>
    <p class="important">
      Welcome to my awesome homepage.
    </p>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

创建.html

{% extends "base.html" %}

{% block title %}Index1{% endblock %}
{% block content %} 
<p class="important">
         first message.
        </p>
{% endblock %}


{% block title %}Index2{% endblock %}
{% block content %} 
<p class="important">
         second message.
        </p>
{% endblock %}

...

{% block title %}Indexn{% endblock %}
{% block content %} 
<p class="important">
         nth message.
        </p>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

如上所述,如何在单个文件上重复扩展 base.html 和重复模板?任何建议。

Dim*_*osh 5

您可以使用宏标记,您的模板将如下所示

{% macro create_block(title, message) %}
    <h1>{{title}}</h1>
    <p class="important">
      {{message}}
    </p>
{% endmacro %}

{% for title, message in list %}
    {{ create_block(title, message) }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我测试它,这是我的脚本:

from jinja2 import Template

titles = ['1 title', '2 title']
messages = ['1 message', '2 message']


template = Template("""
{% macro create_block(title, message) %}
<h1>{{title}}</h1>
    <p class="important">
      {{message}}
    </p>
{% endmacro %}

{% for title, message in list %}
{{ create_block(title, message) }}
{% endfor %}
""")

print template.render(list=zip(titles, messages))
Run Code Online (Sandbox Code Playgroud)

这是我的输出

    <h1>1 title</h1>
    <p class="important">
      1 message
    </p>

    <h1>2 title</h1>
    <p class="important">
      2 message
    </p>
Run Code Online (Sandbox Code Playgroud)

我希望它解决了你的问题