Inclure le fichier html dans le modèle Jinja2

j'utilise des microframes de flasque pour mon serveur qui utilise des modèles Jinja. J'ai un modèle de parent.html et certains childs enfant1.html, enfant2.HTML. Certains de ces enfants sont des fichiers html assez grands et je voudrais les partager d'une façon ou d'une autre pour une meilleure lucidité sur mon travail.

le 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()

le modèle simplifié.html:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <div class="container">
        {% block content %}
        {% endblock %}
    </div>
</body>
</html>

et la magie est dans child1.html:

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

au lieu des commentaires

<!-- include content1.html -->

j'ai beaucoup de texte html. Et il est très difficile de suivre les changements et de ne pas faire certaines erreurs, qui sont alors assez difficiles à trouver et à corriger. J'aimerais donc simplement charger le contenu1.html au lieu de tout écrire dans child1.HTML. Je suis tombé sur cette question inclure un autre fichier HTML dans un fichier HTML , mais j'ai eu des problèmes de mise en œuvre. Je pense que Jinja2 pourrait avoir un meilleur outil pour que.

Note. Le code ci-dessus ne fonctionne peut-être pas correctement, je l'ai juste écrit pour illustrer le problème.

48
demandé sur Community 2014-04-04 14:22:34

2 réponses

utilisez la directive jinja2 {% include %} .

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

cela inclura le contenu du fichier de contenu correct.

116
répondu msvalkon 2014-04-04 10:31:20

vous pouvez utiliser l'instruction include .

11
répondu jarandaf 2014-04-04 10:25:44