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にはそのためのより良いツールがあると思います。
注:上記のコードは正常に動作していない可能性があります。問題を説明するために書きました。
Jinja2 {% include %}
ディレクティブを使用します。
{% extends 'template.html' %}
{% block content %}
{% if task == 'content1' %}
{% include 'content1.html' %}
{% endif %}
{% if task == 'content2' %}
{% include 'content2.html' %}
{% endif %}
{% endblock %}
これには、正しいコンテンツファイルのコンテンツが含まれます。
include ステートメントを使用できます。