Django request.user.username不起作用

时间:2011-03-14 16:50:15

标签: django

您好 我遇到了Django Template系统的问题。当我想要用户登录时检查模板:

{% 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 个答案:

答案 0 :(得分:9)

part 4 of the Django tutorial.中有一个处理上下文的例子但是,简而言之......

最好的方法是使用Django的auth context proccessor。确保您仍然在your settings中拥有它。然后,您需要使用RequestContext

这实质上会将您的代码更改为此。

from django.template import RequestContext
# ...
return render_to_response('index.html', {
    'inhalt': 'Succesfully loged in'
}, RequestContext(request))

答案 1 :(得分:6)

请务必在您的settings.py

中将'django.core.context_processors.request'添加到TEMPLATE_CONTEXT_PROCESSORS

示例:

# 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(request):

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

答案 2 :(得分:3)

在你的python中,你检索登录的用户对象。即定义一个函数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 %}

答案 3 :(得分:2)

您需要确保将'request.user'传递给渲染器。或者更好地使用基于上下文的渲染:

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

context_instance将使用auth中间件上下文处理器在您的视图中设置“用户”。

答案 4 :(得分:1)

您是否已将“用户”实例从视图传递到模板?您需要确保它在您传递到render_to_response()的相同上下文中,或者您选择用于将视图上下文呈现到模板中的任何渲染方法。