Jinja2テンプレートにHTMLファイルを含めるにはどうすればよいですか?


82

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にはそのためのより良いツールがあるかもしれないと思います。

注:上記のコードは正しく機能していない可能性があります。問題を説明するために記述しただけです。

回答:


179

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

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

これには、正しいコンテンツファイルのコンテンツが含まれます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.