您好我正在写一个django项目,我写这样的模板代码:
<ul id="nav">
<li><a href="/">Home</a></li>
<li><a href="/user/">Users</a></li>
{% if user %}
<li><a href="/user/{{ user.id }}/">Settings</a></li>
<li><a href="/logout/">Log Out</a></li>
{% else %}
<li><a href="/login/">Log In</a></li>
<li><a href="/signup/">Sign Up</a></li>
{% endif %}
</ul>
现在在登录视图中,我这样写:
def login(request):
if user_logged_in(request):
return redirect('/')
if request.method == 'GET':
form = LogInForm()
return render_to_response(LOGIN_PATH, {'form':form}, context_instance=RequestContext(request))
但是当我运行服务器时,没有用户登录,并访问登录页面,它显示设置和注销(上下文中有一个用户对象),但它不应该!
如果我删除RequestContext,请回复render_to_response(LOGIN_PATH,{'form':form}),就可以了。和
return render_to_response(LOGIN_PATH, {'form':form, 'user':None}, context_instance=RequestContext(request))
也可以。但我不想这样做。
我知道这是肮脏的设计,嗯......我正在寻找建议和解决方案。非常感谢〜!
答案 0 :(得分:1)
答案 1 :(得分:0)
TEMPLATE_CONTEXT_PROCESSORS
的默认设置包括"django.contrib.auth.context_processors.auth"
。此上下文处理器将user
添加到cotnext,如果请求中未提供用户,则将是匿名的。
如果您希望能够知道用户是否在模板中进行了身份验证,那么@Samuele Mattiuzzo答案就是您应该使用的答案,但如果您不希望出于任何原因将用户包含在上下文中,那么你需要在没有auth上下文处理器的情况下修改默认的TEMPLATE_CONTEXT_PROCESSORS设置。
有关详情read the docs或the code。