Альтернатива {% if request.user.is_active %} в шаблонах Django

Каковы логические альтернативы о:

{% if request.user.is_active %}

Если представление не возвращается render_to_response со словарем с requestшаблон не работает должным образом.

Итак, любые идеи приветствуются.

// отредактирован

Моя мотивация такова: когда вы работаете с представлениями из установленных приложений, у вас нет возможности их изменить.

2 ответа

Решение

Добавлять django.contrib.auth.context_processors.auth в TEMPLATE_CONTEXT_PROCESSORS в вашем settings.py,

Теперь у вас есть user переменная во всех ваших шаблонах. Таким образом, вы можете использовать это:

{% if user.is_active %}

Подробнее смотрите в документации: шаблонные контекстные процессоры в настройках, автоматический контекстный процессор.

view.py:

def foo_view(request):
    ...
    is_active = request.user.is_active
    return render_to_response('template.html', {'is_active':is_active})

или context_processor:

def is_user_active(request):
    return {'is_active': request.user.is_active}

или промежуточное ПО:

class IsUserActive:
    def process_template_response(self, request, response):
        response.context['is_active'] = request.user.is_active

template.html:

{% if is_active %}
    ...
{% endif %}

Но, искренне, я не знаю, почему render_to_response не удовлетворяет вас:

...
return render_to_response('template.html', 
    context_instance=RequestContext(request))
Другие вопросы по тегам