Django request.user.username不';行不通

Django request.user.username不';行不通,django,Django,嗨 Django模板系统有问题。当我想签入模板时,如果用户使用以下方式登录: {% if user.is_authenticated %} # success {% else %} <p>Welcome, new user. Please log in.</p> {% endif %} 它正确地显示了其他部分。 希望有人能帮助我。 谢谢Phil您是否将“用户”实例从视图传递到模板?您需要确保它与您传递到render_to_response()中的上下文相

嗨 Django模板系统有问题。当我想签入模板时,如果用户使用以下方式登录:

{% if user.is_authenticated %}
    # success
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}
它正确地显示了其他部分。 希望有人能帮助我。
谢谢Phil

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

您需要确保将“request.user”传递到呈现器中。或者更好地使用基于上下文的渲染:

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

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

有一个处理上下文的示例,但简而言之

最好的方法是使用Django的auth上下文处理器。确保你还在里面。然后你需要使用

这将从本质上改变您的代码

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

在python中,检索登录的用户对象。即定义一个函数获取当前用户

所以你的回答应该是这样的:

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 %}
{%if用户%}
哈罗用户{{user.name}

{%else%} 欢迎新用户。请登录

{%endif%}
记住在settings.py中向模板添加'django.core.context\u processors.request'

例如:

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


+1与
{{request.user}
变量不同,默认情况下,
{{user}}
变量可用。对于后者,必须启用
django.core.context\u processors.request
。我发现这对于当前的Django版本更好,尽管也是正确的。
# 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',
)
# 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))