2010-02-19 48 views
0

这是检查会话中用户名变量和输出(取决于它是否存在)或“您已登录”的最有效和最干净的方式。或“您已注销”。为render_to_response写入更好的会话变量检查代码

PYTHON(DJANGO)

def logged_in(request) 
    return render_to_response('loggedincheck.html', {'request': request.session.get['username']}) 

HTML

{如果请求%} 您在已经登录。{%其他%} 你没有登录in。{%endif%}

回答

5

Django自带了一些模板context处理器 - 这只是一些变量插入到每一个被您的网站上呈现的模板功能。

正如@Jack所述,其中一个名为django.core.context_processors.auth。这会在每个模板中插入名为user的变量,并且默认情况下处于启用状态。

因此,要找出一个用户登录或没有,你应该在你的模板中使用此代码:

{% if user.is_authenticated %} 
    You're logged in. 
{% else %} 
    You're not logged in. 
{% endif %} 

用杰克给了代码的问题,就是user变量总是存在 - 所以总是会评估为True(只要您使用的是django.core.context_processors.request上下文处理器,默认情况下启用而不是)。因此,要确定用户是否实际登录,您必须使用is_authenticated()方法。

0

如果您使用的是django.contrib.auth两者django.core.context_processors.authdjango.core.context_processors.request在您TEMPLATE_CONTEXT_PROCESSORS,你可以简单地使用:

{% if request.user.is_authenticated %} 
    You're logged in. 
{% else %} 
    You're not logged in. 
{% endif %} 
+0

-1'request.user'始终存在,因为未经身份验证的用户(每个用户)也是用户。 – 2010-02-22 15:14:04

+0

你是对的。我习惯于检查特定的权限,而不是如果他们通过身份验证,所以我忘了在那里查找那一点。我解决了它。 – 2010-02-22 15:42:38