Возможно ли автоматическое включение пользователя во все шаблоны?

#django #django-templates #django-context

#django #django-templates #django-context

Вопрос:

У меня есть проект в Django 1.3. Чтобы показывать имя пользователя на всех страницах, я использую такие теги в base.html

 {% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}.  
    <a href="/proc/accounts/logout/">loggout</a></p>
{% else %}
    <a href="/proc/accounts/login/">loggin</a>
{% endif %}
  

Но если я не вернусь context_instance=RequestContext(request) из представления, значение пользователя в шаблоне будет пустым. 'django.contrib.auth.context_processors.auth' Включено в TEMPLATE_CONTEXT_PROCESSORS .

Возможно ли автоматическое включение пользователя во все шаблоны?

Ответ №1:

начиная с django 1.3. используйте функцию shortcuts.render и не беспокойтесь о requestcontext, включая ваши представления

Ответ №2:

Вы сами дали ответ. Пока вы используете RequestContext, он будет включен во все шаблоны.

Если вы действительно считаете, что это слишком много работы, вы могли бы использовать (новый в 1.3) класс TemplateResponse.

Ответ №3:

Или просто создайте контекстный процессор. Смотрите http://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors

Поместите это в context_processor.py

 def root_categories(request):
    return {
        'user': request.user,
    }
  

в settings.py добавьте контекстный процессор.

теперь в вашем шаблоне попробуйте: {{ user }}