J'utilise Flask micro-framework pour mon serveur qui utilise des modèles Jinja.
J'ai un parent template.html
Et des modèles d'enfants appelés child1.html
Et child2.html
, Certains de ces modèles d'enfants sont de très gros fichiers HTML et j'aimerais les scinder en quelque sorte pour une meilleure lucidité. sur mon travail.
Contenu de mon script 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 template.html
Simplifié:
<!DOCTYPE html>
<html>
<head></head>
<body>
<div class="container">
{% block content %}{% endblock %}
</div>
</body>
</html>
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 commettre d'erreurs, qui sont alors assez difficiles à trouver et à corriger.
J'aimerais simplement charger le content1.html
Au lieu de tout écrire dans child1.html
.
Je suis tombé sur cette question , mais j'ai eu du mal à la mettre en œuvre.
Je pense que Jinja2 pourrait avoir un meilleur outil pour cela.
REMARQUE: Le code ci-dessus peut ne pas fonctionner correctement, je viens de l'écrire pour illustrer le problème.
Utilisez le jinja2 {% include %}
directive.
{% 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.
Vous pouvez utiliser l'instruction include .