如何扩展 jinja 块模板并多次使用它
How to extend jinja block template and use it multiple times
Base.html 延伸到 create.html
base.html
{% block title %}Index{% endblock %}
{% block body %}
<h1>Index</h1>
<p class="important">
Welcome to my awesome homepage.
</p>
{% endblock %}
create.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 %}
如何扩展 base.html 并像上面那样在单个文件上重复重复模板?任何建议。
您可以使用宏标记,您的模板将如下所示
{% macro create_block(title, message) %}
<h1>{{title}}</h1>
<p class="important">
{{message}}
</p>
{% endmacro %}
{% for title, message in list %}
{{ create_block(title, message) }}
{% endfor %}
我测试了一下,这是我的脚本:
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))
这是我的输出
<h1>1 title</h1>
<p class="important">
1 message
</p>
<h1>2 title</h1>
<p class="important">
2 message
</p>
我希望它能解决你的问题
Base.html 延伸到 create.html
base.html
{% block title %}Index{% endblock %}
{% block body %}
<h1>Index</h1>
<p class="important">
Welcome to my awesome homepage.
</p>
{% endblock %}
create.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 %}
如何扩展 base.html 并像上面那样在单个文件上重复重复模板?任何建议。
您可以使用宏标记,您的模板将如下所示
{% macro create_block(title, message) %}
<h1>{{title}}</h1>
<p class="important">
{{message}}
</p>
{% endmacro %}
{% for title, message in list %}
{{ create_block(title, message) }}
{% endfor %}
我测试了一下,这是我的脚本:
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))
这是我的输出
<h1>1 title</h1>
<p class="important">
1 message
</p>
<h1>2 title</h1>
<p class="important">
2 message
</p>
我希望它能解决你的问题