1. ホーム
  2. python

[解決済み] Jinja2テンプレートにHTMLファイルをインクルードするには?

2023-01-07 01:35:23

質問

私はJinjaテンプレートを使用するサーバーにFlaskマイクロフレームワークを使用しています。

私は、親 template.html という名前の子テンプレートがあります。 child1.htmlchild2.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にはもっと良いツールがあるかもしれませんね。

NOTEです。 上記のコードは正しく動作しないかもしれません。問題を説明するために書いただけです。

どのように解決するのですか?

jinja2 を使用する。 {% include %} ディレクティブを使用します。

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

これは、正しいcontent-fileからコンテンツを含めます。