Закрыть

Для эффективной работы на сайте используются cookie и обработка персональных данных. Пользуясь этим сайтом, вы соглашаетесь с правилами использования сайта. Подробнее

Цитата дня

Vivazzi.ru

Личный сайт Мальцева Артема

Вы счастливы или несчастны не благодаря тому, что вы имеете, и не в связи с тем, кем являетесь, где находитесь или что делаете; ваше состояние определяется тем, что вы обо всем этом думаете.

Дейл Карнеги

You must enable the 'sekizai.context_processors.sekizai'

2 декабря 2016 г. 22: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 {'request': context['request'], 'SEKIZAI_CONTENT_HOLDER': context['SEKIZAI_CONTENT_HOLDER'],
            'STATIC_URL': context['STATIC_URL'], 'quote': quote}

Здесь, как видите, мы передаём шаблону 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 (всего 2 оценки)

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

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

Автор статьи

Права на использование данной статьи, расположенной на настоящей странице http://vivazzi.ru/it/you-must-enable-sekizai/:

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

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

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

Вам нужно саморазвиваться или вы хотите зарабатывать деньги?

Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации

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

Вы можете оставить комментарий как незарегистрированный пользователь. Но, зарегистрировавшись, вы сможете получать оповещения об ответах, а также иметь доступ к своему личному аккаунту для просмотра своих комментариев.

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

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

Попробуйте