Django request.user.username не работает - PullRequest
8 голосов
/ 14 марта 2011

Привет У меня проблема с системой шаблонов Django. Когда я хочу проверить в шаблоне, если пользователь вошел в систему с:

{% if user.is_authenticated %}
    # success
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

Я не дошел до успеха. Когда я использую в представлении:

if not request.user.is_authenticated():
    return render_to_response('index.html', {'inhalt': 'Not loggged in'})
else:
    return render_to_response('index.html', {'inhalt': 'Succesfully loged in'})

это правильно показывает остальную часть. Надеюсь, кто-нибудь может мне помочь. Спасибо, Фил

Ответы [ 5 ]

9 голосов
/ 14 марта 2011

Пример обработки контекста приведен в части 4 учебника по Django. Однако вкратце ...

Лучший способ сделать это - с помощью обработчика контекста аутентификации Django,Убедитесь, что он по-прежнему установлен в ваших настройках .Затем вам нужно использовать RequestContext

Это существенно изменит ваш код на это.

from django.template import RequestContext
# ...
return render_to_response('index.html', {
    'inhalt': 'Succesfully loged in'
}, RequestContext(request))
6 голосов
/ 14 марта 2011

Не забудьте добавить 'django.core.context_processors.request' к вашему TEMPLATE_CONTEXT_PROCESSORS в вашем settings.py

Пример:

# Context processors
TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.request',
    'django.contrib.messages.context_processors.messages',
)

И добавить RequestContext (запрос):

# import
from django.template import RequestContext

# render
if not request.user.is_authenticated():
    return render_to_response('index.html', {'inhalt': 'Not loggged in'})
else:
    return render_to_response('index.html', {'inhalt': 'Succesfully logged in'}, RequestContext(request))
3 голосов
/ 14 марта 2011

В вашем питоне вы получаете пользовательский объект, который вошел в систему. I.e определяем функцию get_current_user.

чтобы ваш ответ выглядел примерно так:

class Index(webapp.RequestHandler):
  def get(self):
    user= get_current_user()
    templates.render(self, 'mypage.html', user=user)

Тогда на вашем шаблоне django вы можете просто пойти так:

{% if user %}
  <p>Hallo user {{user.name}}</p>
{% else %}
  <p>Welcome, new user. Please log in.</p>
{% endif %}
2 голосов
/ 14 марта 2011

Вы должны убедиться, что вы передаете 'request.user' в средство визуализации.Или еще лучше использовать контекстную визуализацию:

return render_to_response('index.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))

Context_instance будет использовать контекстный процессор промежуточного программного обеспечения для установки «пользователя» в вашем представлении.

1 голос
/ 14 марта 2011

Передали ли вы свой "пользовательский" экземпляр из представления в шаблон? Вам нужно убедиться, что он находится в том же контексте, который вы передаете в render_to_response (), или какой бы метод визуализации вы ни выбрали для рендеринга контекста представления в шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...