如何在 Jinja2模板中包含 HTML 文件?

我使用 Flask 微框架为我的服务器使用金贾模板。

我有一个家长 template.html和一些子模板称为 child1.htmlchild2.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可能有更好的工具。

注意: 上面的代码可能无法正常工作,我只是编写它来说明这个问题。

117911 次浏览

Use the jinja2 {% include %} directive.

{% extends 'template.html' %}
{% block content %}
{% if task == 'content1' %}
{% include 'content1.html' %}
{% endif %}
{% if task == 'content2' %}
{% include 'content2.html' %}
{% endif %}
{% endblock %}

This will include the content from the correct content-file.

You can use the include statement.

I'd like to add the proper syntax for using include, one given above works fine, but when it comes to the path, it took some time to find this, it is not even mentioned in the official document.

Syntax for include is:

{% include 'path_to_template_file' %}