2

基本テンプレートからインクルードされたテンプレートにブロックをコンテキストとともに渡す必要がありますが
、基本テンプレートでこのブロックが重複することは望ましくありません。たとえば、いくつかのテンプレートがあります

header.html

<header>
    <title>{% block title %}{% endblock %}</title>
</header>

body1.html

{% include   "test_header.html" ignore missing with context %}
{% block title %}Title1{% endblock %}
<body>
    Hello
</body>

body2.html

{% include   "test_header.html" ignore missing with context %}
{% block title %}Title2{% endblock %}
<body>
    Hello
</body>

body1.html をレンダリングしようとすると、ページのタイトルが「Title1」に変更されますが、ブロック タイトルが 2 回レンダリングされ、本文に Title1 が表示されます。このコンテキストを include ステートメントに正確に渡すにはどうすればよいですか?

4

1 に答える 1

2

タイトルのような動的コンテンツを含める方法は通常 {{ ... }} ですが、{% ... %} は制御ステートメント (for ループ、if ステートメント、ブロックなど) 用です。次のような特定のテンプレートを作成できます。

base.html

<html>
<head>
    <title>{{title}}</title>
</head>
<body>
    {% block body %}{% endblock %}
</body>
</html>

@alecxe が述べたようにextends、基本テンプレートをオフにする必要があります。

body1.html

{% extends "base.html" %}

{% block body %}
Hello!
{% endblock %}

body2.html

{% extends "base.html" %}

{% block body %}
Hi!
{% endblock %}

タイトルは、ビューでテンプレートに渡す必要がrender_template()あります。

view.py の抜粋

@app.route('/body1')
def body1():
    title = "Body 1 Title"
    return render_template("body1.html", title = title)

@app.route('/body2')
def body2():
    title = "Body 2 Title"
    return render_template("body2.html", title = title)

テンプレート間でヘッダーを大幅に変更したい場合は、<title>{{title}}</title>in{% block header %}{% endblock %}に置き換えることもできますbase.html。次にbody1.html、次のようになります。

{% extends "base.html" %}

{% block header %}
<title>{{title}}</title>
{% endblock %}

{% block body %}
Hello!
{% endblock %}
于 2013-08-22T09:31:34.983 に答える