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>

Оцените статью

5 из 5 (всего 3 оценки)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/you-must-enable-sekizai/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/you-must-enable-sekizai/">https://vivazzi.pro/ru/it/you-must-enable-sekizai/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц