如何在Jinja2模板中包含HTML文件?
我正在使用Flask这个小型框架来搭建我的服务器,它使用Jinja模板。
我有一个父模板叫做template.html
,还有一些子模板,分别叫child1.html
和child2.html
。其中一些子模板的HTML文件比较大,我想把它们拆分一下,这样可以更清楚地管理我的工作。
这是我的main.py
脚本的内容:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
@app.route('/<task>')
def home(task=''):
return render_template('child1.html', task=task)
app.run()
简化版的template.html
:
<!DOCTYPE html>
<html>
<head></head>
<body>
<div class="container">
{% block content %}{% endblock %}
</div>
</body>
</html>
神奇的部分在于child1.html
:
{% extends 'template.html' %}
{% block content %}
{% if task == 'content1' %}
<!-- include content1.html -->
{% endif %}
{% if task == 'content2' %}
<!-- include content2.html -->
{% endif %}
{% endblock %}
而不是那些注释:
<!-- include content1.html -->
我有很多HTML文本,跟踪这些变化非常困难,而且很容易出错,这些错误之后又很难找到和修正。
我希望能直接加载content1.html
,而不是把所有内容都写在child1.html
里。
我看到过这个问题,但在实现的时候遇到了一些问题。
我觉得Jinja2可能有更好的工具来解决这个问题。
注意:上面的代码可能无法正常工作,我只是写它来说明问题。
3 个回答
7
我想补充一下使用include的正确写法,上面提到的那种写法没问题,但在路径方面,我花了一些时间才找到这个,官方文档里甚至没有提到。
include的写法是:
{% include 'path_to_template_file' %}
23
你可以使用 include 这个语句。
242
使用 jinja2 的 {% include %}
指令。
{% extends 'template.html' %}
{% block content %}
{% if task == 'content1' %}
{% include 'content1.html' %}
{% endif %}
{% if task == 'content2' %}
{% include 'content2.html' %}
{% endif %}
{% endblock %}
这样可以把正确的内容文件里的内容包含进来。