Вопрос по – Django 1.4 - {{request.user.username}} не отображается в шаблоне

9

На мой взгляд, я могу напечатать request.user.username, однако в шаблоне {{request.user.username}} не отображается. Чтобы сделать это проще, я удалил логику из функции и импортирую render_to_response & amp; RequestContext.

from django.shortcuts import render_to_response
from django.template import RequestContext

@login_required
@csrf_protect
def form(request):
    print request.user.username
    data = {}
    return render_to_response('form.html', data, context_instance=RequestContext(request))   

Я предполагаю, что у меня есть проблемы с моим settings.py.

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'src',
)

Заранее спасибо за помощь-

Ваш Ответ

2   ответа
40

Какупоминается в документацииобъект аутентифицированного пользователя хранится вuser переменная в шаблонах. Упомянутая документация включает в себя следующий пример:

When rendering a template RequestContext, the currently logged-in user, either a User instance or an AnonymousUser instance, is stored in the template variable {{ user }}:

{% if user.is_authenticated %}
    <p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

EDIT: Благодаря @buffer, который выкопал этот старый ответ, я обновил его с самым последним состоянием. Когда он был изначально написан, менее чем через месяц после Django 1.4 (который был выпущен в конце марта 2012 года), это было правильно. Но, начиная с Django 1.5, правильным методом для получения имени пользователя является вызовget_username() на экземпляре пользовательской модели. Это было добавлено из-за возможности обменаUser класс (и иметь пользовательское поле в качестве имени пользователя).

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededuser.get_usernameError: User Rate Limit Exceededuser.username : docs.djangoproject.com/en/dev/ref/contrib/auth/…
Error: User Rate Limit Exceeded Emile
Error: User Rate Limit Exceeded Emile
5

Проверьте документацию дляRequestContext а такжеTEMPLATE_CONTEXT_PROCESSORS.

Если ты хочешьrequest чтобы быть в контексте вашего шаблона, то вам нужно включитьdjango.core.context_processors.request в вашемTEMPLATE_CONTEXT_PROCESSORS установка. Это не там по умолчанию.

Однако, как указал Тадек в своем ответеuser уже доступен, если вы используете настройки по умолчанию, так какdjango.contrib.auth.context_processors.auth является частью списка по умолчанию дляTEMPLATE_CONTEXT_PROCESSORS.

@BrianNeal: я не хочу передавать пользователя в шаблоны. Есть ли способ отключить его навсегда?
Error: User Rate Limit Exceeded Emile
@ user1050619 Да, определите свой собственный TEMPLATE_CONTEXT_PROCESSORS и не включайте процесс проверки подлинности или запроса.
Error: User Rate Limit ExceededTEMPLATE_CONTEXT_PROCESSORS, Это может произойти за один раз, но я не уверен.

Похожие вопросы