шаблоны django - использование block.super во включенном шаблоне завершается неудачно (исключение) - PullRequest
13 голосов
/ 04 июля 2011

Идея состоит в том, чтобы иметь несколько виджетов на странице и включать все файлы js и css, необходимые для этих «виджетов» (так легко управлять файлами). Дублированные файлы не проблема. Шаблон каждого виджета включен в страницу {% include%} Из шаблона виджета внутри я пытаюсь добавить контент в родительский блок:

РОДИТЕЛЕЙ:

{%block js%}
{%endblock%}

WIDGET

{%block js%}
   {{block.super}}
   ///my widget spectyfic JS
{%end block%}

это выдает ошибку с {{block.super}}: Caught AttributeError while rendering: 'BlockNode' object has no attribute 'context'

Я не уверен, как еще я могу расширить блок ... Кажется, в django это невозможно ... есть идеи? Определение нескольких блоков не сработает, так как мы не знаем, сколько разных виджетов с именами будет на каждой странице ... (и это не беспокоит nemplate)

Ответы [ 2 ]

15 голосов
/ 04 июля 2011

С документы :

Примечание

Тег include следует рассматривать как реализацию «рендеринга этого подшаблона и включения HTML», а не «анализа этого подшаблона и включения его содержимого, как если бы он был частью родительского элемента». Это означает, что между включенными шаблонами нет общего состояния - каждое включение является полностью независимым процессом рендеринга.

Если вы хотите, чтобы block.super работал, вам нужно использовать extends.

2 голосов
/ 09 сентября 2014

Я знаю это слишком поздно, но у меня может быть какое-то решение. Используя django-sekizai, вы можете загрузить js и css в одно место. Взгляните на http://django -sekizai.readthedocs.org / ru / latest /

...