您好 我遇到了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'})
它正确显示了我的其他部分。 希望有人可以帮助我。 谢谢菲尔
答案 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()的相同上下文中,或者您选择用于将视图上下文呈现到模板中的任何渲染方法。