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