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


82

我正在为使用Jinja模板的服务器使用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可能对此有更好的工具。

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

Answers:


179

使用jinja2{% include %}指令。

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.