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

新手上路,请多包涵

我正在为使用 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 可能有更好的工具。

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

原文由 quapka 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 427
2 个回答

使用 jinja2 {% include %} 指令。

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

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

原文由 msvalkon 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 包含 语句。

原文由 jarandaf 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题