Всегда анонимный пользователь при использовании render_to_response в коде django - PullRequest
0 голосов
/ 06 ноября 2011

Я использую Django 1.3.1. В моем коде Django у меня есть следующий шаблон для главной страницы, он называется main_page.html:

<html>
<head>
<title>My Site</title>
</head>
<body>
<h1>Welcome</h1>
{% if user.username %}
   <p>Welcome {{ user.username }}!</p>
{% else %}
   <p>Welcome anonymous user!
   You need to <a href="/login/">login</a>
{% endif %}
</body>
</html>

У меня есть следующее представление для этого шаблона:

def main_page(request):
  template = get_template('main_page.html')
  variables = Context({'user': request.user})
  output = template.render(variables)
  return HttpResponse(output)

Работает как положено, т.е. проверяет, вошел ли пользователь в систему или нет, и приветствует соответственно.Но если я заменю вышеприведенное представление приведенным ниже кодом, то я всегда получаю сообщение для анонимного пользователя на главной странице, независимо от того, вошел я в систему или нет.

def main_page(request):
  return render_to_response(
      'main_page.html',
       {'user': request.user}
  )

Что может быть не такВот ?.Пожалуйста, помогите.

Спасибо

Ответы [ 2 ]

4 голосов
/ 06 ноября 2011

В шаблоне вы должны использовать {% if request.user.is_authenticated %} вместо {% if user.username %}. Это должно решить вашу проблему.

С другой стороны, я не знаю, почему вы пытаетесь явно добавить переменную user в представление. Почему бы не использовать что-то вроде:

def main_page(request):
  return render_to_response(
      'main_page.html',
       context_instance=RequestContext(request)
  )
0 голосов
/ 06 ноября 2011

не уверен, почему это не работает.пользовательская переменная определенно правильна в представлении?(попробуйте распечатать его на консоли или зайти в отладчик).возможно ли, что он работает с контекстом запроса, потому что обработчик контекста аутентификации уже добавляет user в ваш контекст?

, начиная с django 1.3, есть новый ярлык рендер

render(request, template, dictionary)

, если вы просто хотите сэкономить на наборе

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