用户身份验证模板标签不起作用-Django

Posted

技术标签:

【中文标题】用户身份验证模板标签不起作用-Django【英文标题】:user auth template tags not working-Django 【发布时间】:2011-08-30 02:48:30 【问题描述】:

我使用了 django-registration 应用程序。一切顺利。用户注册了电子邮件验证,但是当用户登录并被重定向到主页时,身份验证模板标签(例如 % if user.is_authenticated % 返回 false。

我的 login.html 中有这个

<input type="hidden" name="next" value="/" />

登录后我想将用户重定向到主页和 mainpage.html

% if user.is_authenticated %
     <p>Welcome,  user.username . Thanks for logging in.</p>
% else %
    <p>Welcome, new user. Please log in.</p>  
% endif %

但 user.is_authenticated 在这里返回 false。这里可能有什么问题?谢谢

【问题讨论】:

您是否正确传递了用户对象?这可能会导致它返回为 false 【参考方案1】:

尝试改用% if request.user.is_authenticated %。用户完全有可能没有被传递到视图中的上下文字典中。如果在模板中找不到对象,它将跳到块的 else 部分。渲染模板在 django 中很奇怪,因为通常情况下的异常会被吞没。

【讨论】:

我正在使用 django.contrib.auth.login 视图。我认为他们确实在他们的上下文字典中传递了用户。 ? @Nazim,你试过 request.user 了吗?【参考方案2】:

您能否向我们展示处理 URL '/' 的视图的代码?我认为这是您的问题所在,而不是您使用 django-registration。

此视图是否将user 置于上下文中?如果要在模板中使用它,则必须将其放入。如果要在上下文中使用request,则需要确保将RequestContext 的实例作为context 而不仅仅是一个标准的上下文对象。

【讨论】:

【参考方案3】:

这对我有用。

假设您的main pageviews.py 中的视图处理

from django.shortcuts import render_to_response

def mainpage(request):
    return render_to_response('mainpage.html')

您需要将 RequestContext 添加到用户对象中。将视图更改为

from django.shortcuts import render_to_response
from django.template import RequestContext

def mainpage(request):
    return render_to_response('mainpage.html', context_instance=RequestContext(request))

【讨论】:

以上是关于用户身份验证模板标签不起作用-Django的主要内容,如果未能解决你的问题,请参考以下文章

Django登录身份验证不起作用

令牌身份验证在 django rest 框架上的生产中不起作用

Django 身份验证:员工索引和用户索引(2 个模板)

为啥我的电话身份验证安全规则不起作用?

如何将 Django 的内置身份验证与自定义表单(html 模板)一起使用

Django为不同的组模板不同的项目。用户身份验证和组隔离