#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 }}