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


85

Я використовую мікросхему 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 може мати кращий інструмент для цього.

ПРИМІТКА: Наведений вище код може працювати неправильно, я просто написав його, щоб проілюструвати проблему.

Відповіді:


184

Використовуйте {% include %}директиву jinja2 .

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

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.