在Jinja2模板中包含html文件

我为我的服务器使用Jinja模板使用Flask microframework。 我有父母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文本。 要记住变化是很困难的,不要犯一些很难find和纠正的错误。 所以我想只加载content1.html,而不是全部写在child1.html中。 我遇到过这个问题在HTML文件中包含另一个HTML文件 ,但是我在实现它时遇到了问题。 我认为Jinja2可能有更好的工具。

注意。 上面的代码可能工作不正常,我只是写它来解决这个问题。

使用jinja2 {% include %}指令。

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

这将包括来自正确的内容文件的内容。

您可以使用include语句。