2010-09-26 3 views
2

У меня есть шаблон, который включает в себя другой шаблон. Этот шаблон включает в себя блок-теги.Django - Блокировать теги в шаблонах включены, вызывая шаблон

Пример:

base.html

BASE 
{% block title %}Base Title{% endblock %} 
{% block content %}{% endblock %} 

template1.html

{% extends 'base.html' %} 
{% block title %}Extended Title{% endblock %} 
{% block content %} 
    Extended content 
    {% include 'include.html' %} 
{% endblock %} 

include.html

{% block title %}Include Title{% endblock %} 
{% block another_content %}Include Content{% endblock %} 

Что я ожидаю, если бы я сделать шаблон .html Я должен получить, который я под 1.1.1

BASE 
Extended Title 
Extended content 
Include Title 
Include Content 

Но я на самом деле получить это, когда я перешел на 1.2.1 и 1.2.3:

BASE 
Extended Title 
Extended Content 
Extended Title 
Include Content 

Как вы можете видеть, в заголовке блока в include.html заменяется заголовочным блоком template1.html. Эта замена происходит только в том случае, если имена блоков одинаковы, поэтому, если я изменяю заголовок в include.html, это не происходит. Мне кажется, что он включает и распространяется в одно и то же время? Кто-нибудь знает, если это ожидается/я делаю что-то неправильно?

ответ

3

Если вы не используетеextends в include.html, то такое поведение нормально - я полагаю, что там была ошибка в 1.1.1.

Выдержка из официальной документации:

Наконец, обратите внимание, что вы не можете определить несколько тегов {% блок%} с тем же именем в одном шаблоне. Это ограничение существует, потому что блок-тег работает в «обоих» направлениях. То есть блок-тег не просто предоставляет отверстие для заполнения - он также определяет контент, заполняющий отверстие в родительском элементе. Если в шаблоне было два одинаково названных тега {% block%}, родитель этого шаблона не знал бы, какой из этих блоков использовать.

Читать все это здесь: Template Inheritance

-1

Если это то, что вы хотите, то include.html не должен содержать каких-либо блоков вообще, т.е. просто:

Include Title 
Include Content 
+0

Это любопытное, что я имею сказал выше :) – bx2

 Смежные вопросы

  • Нет связанных вопросов^_^