Подтвердить что ты не робот

Как включить файл HTML в шаблон Jinja2?

Я использую микро-фреймворк 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 может быть лучший инструмент для этого.

ПРИМЕЧАНИЕ. Приведенный выше код может работать некорректно, я просто написал его, чтобы прояснить проблему.

4b9b3361

Ответ 1

Используйте директиву jinja2 {% include %}.

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

Это будет включать содержимое из правильного содержимого файла.

Ответ 2

Вы можете использовать оператор include.