You must enable the 'sekizai.context_processors.sekizai'
3 декабря 2016 г. 3:28
Бывает странно видеть ошибку:
TemplateSyntaxError: You must enable the 'sekizai.context_processors.sekizai' template context processor or use 'sekizai.context.SekizaiContext' to render your templates.
хотя и подключен context_processors
:
TEMPLATES = [ { 'OPTIONS': { 'context_processors': [ ... 'sekizai.context_processors.sekizai', ] }, }, ]
Такое может происходить, когда вы пытаетесь срендерить шаблон, в котором используются sekizai-теги, но не передали context
, например, при использовании inclusion_tag
. На этом этапе странность и пропадает - ведь действительно, sekizai нужен context
.
Как вариант, можно использовать следующий пример включающего тега:
@register.inclusion_tag('quote.html', takes_context=True) def get_quote(context): context['quote'] = Quote.objects.last() return context
takes_context=True
- передаёт context
в наш inclusion_tag
, что позволяет нам расширить context
. В моём случае я добавляю в context
последний объект модели Quote
. И наконец, нам нужно вернуть context
.
Но в этом подходе есть один недостаток: глобальные шаблонные переменные могут быть затёрты локальными. Посмотрите на наш шаблонный тег: context['quote'] = Quote.objects.last()
- здесь мы присваиваем новое значение переменной context['quote']
, и если она была в шаблоне, то она затрётся новым значением, что может привести к неправильному рендеру. Такие ошибки обычно не быстро находятся, и лучше их избегать.
Вот пример правильного использования включающего тега:
@register.inclusion_tag('quote.html', takes_context=True) def get_quote(context): quote = Quote.objects.last() return {'quote': quote, 'SEKIZAI_CONTENT_HOLDER': context['SEKIZAI_CONTENT_HOLDER'], 'STATIC_URL': context['STATIC_URL']}
Здесь, как видите, мы передаём шаблону quote.html
только самое необходимое для его рендера. При этом мы можем быть уверены, что глобальные переменные context не затрутся.
Теперь уже можно использовать в шаблоне sekizai-теги, например addtoblock
:
{% load sekizai_tags %} {% addtoblock "css" %}<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/quote.css" property="">{% endaddtoblock %} <blockquote> <p>{{ quote.text|linebreaksbr }}</p> <p class="author">{{ quote.author }}</p> </blockquote>
Похожие статьи:
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0