2013-08-22 4 views
2

Мне нужно передать блок из базового шаблона, чтобы включить шаблон с контекстом, но не хочу
перекрытие этих блоков в базовом шаблоне. Например, у меня есть пара шаблоновКак передать блоки для включения оператора в Jinja2

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», но заголовок блока отображается дважды и отображает Title1 в теле. Как я могу передать этот контекст именно для инструкции include?

+0

Вообще говоря, у вас есть вариант использования 'extends', а не' include'. Я бы создал 'base.html' с включенным' header.html'. Затем я увеличил бы body1 и body2 от базы. – alecxe

ответ

1

Способ включения динамического содержимого, такого как заголовок, обычно {{...}}, тогда как {% ...%} предназначен для управляющих операторов (для циклов, если инструкции, блоки и т. Д.). Вы можете построить свои определенные шаблоны, как следующее:

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> с {% block header %}{% endblock %} в base.html. Ваш body1.html мог бы выглядеть так:

{% extends "base.html" %} 

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

{% block body %} 
Hello! 
{% endblock %} 
Смежные вопросы