私は、Jinja テンプレートを使用するサーバーに Flask マイクロフレームワークを使用しています。
および という親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 にはそれに適したツールがあると思います。
注記:上記のコードは正しく動作しない可能性があります。問題を説明するために書いただけです。
ベストアンサー1
jinja2を使用する{% include %}
指令。
{% extends 'template.html' %}
{% block content %}
{% if task == 'content1' %}
{% include 'content1.html' %}
{% endif %}
{% if task == 'content2' %}
{% include 'content2.html' %}
{% endif %}
{% endblock %}
これには、正しいコンテンツ ファイルからのコンテンツが含まれます。