当前位置: 首页 > 面试题库 >

Django模板中的user.is_authenticated遇到麻烦

张心水
2023-03-14
问题内容

当我较早前问到你时是否尝试帮助我。必须删除该问题,因为由于某些原因不允许我编辑其他信息。

我正在django网站上实施用户身份验证。一切正常。我的视图,模型,URL等均已设置。用户可以注册,登录和注销。我遇到的问题是这段代码:

{% if request.user.is_authenticated %}
      <li><a href="/logout">Log Out</a></li>
      {% else %}
      <li><a href="/login">Log In</a></li>
      {% endif %}

即使登录后,它仍会显示“登录”作为选项,而不是“注销”。但是,如果我单击链接,它将把我重定向到/ profile,因为如果我登录,该视图就会告诉我执行该操作。因此,很明显它知道我已登录,但是模板不是readint user.is_authenticated为true。

与登录请求有关的视图是:

def LoginRequest(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/profile/')
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            profile = authenticate(username=username, password=password)
            if profile is not None:
                login(request, profile)
                return HttpResponseRedirect('/profile/')
            else:
                return render_to_response('template/login.html', {'form': form}, context_instance=RequestContext(request))
        else:
            return render_to_response('template/login.html', {'form': form}, context_instance=RequestContext(request))
    else:
        ''' user is not submitting the form, show them login form ''' 
        form = LoginForm()
        context = {'form': form}
        return render_to_response('template/login.html', context, context_instance = RequestContext(request))

问题答案:

如果启用了身份验证上下文处理器,则user该模板上下文中已经存在该处理器,你可以执行以下操作:

{% if user.is_authenticated %}

如果要访问request模板,请确保已启用请求上下文处理器。

在你的问题中,你正在使用render_to_response。从Django 1.3开始,最好使用render代替render_to_response。在Django <= 1.9中使用render_to_responsewith RequestContext(request)可以工作,但是从Django 1.10开始,如果要使用render上下文处理器,则必须使用快捷方式。

return render(request, 'template/login.html', context)


 类似资料:
  • 问题内容: -edit2-3小时后,仍然有相同的问题。我正在使用noinstall存档软件包。-编辑-也许有人可以告诉我一种检查表是否存在的更好方法? 我的函数库中有一个函数来检查是否存在一个表,该表过去我曾问过要怎么做。 我删除了数据库并再次创建了它。我的代码未正确创建表。调试后,我决定编写以下内容。 很奇怪… mydb被删除并再次创建(我写了,应该消失了吗?)。让我们找出存在的东西 我不仅不知

  • 然后我尝试通过以下操作来测试这一点: 有没有人知道这是怎么回事!任何提示都很感激!

  • 问题内容: 我正在寻找一种使用django中的模运算符之类的方法。我想做的是在循环中的每个第四个元素中添加一个类名。 使用模数,它看起来像这样: 当然,这是行不通的,因为%是保留字符。还有其他方法吗? 问题答案: 您需要divisibleby(内置的django过滤器)。

  • 问题内容: 我正在尝试在Django模板中使用Vue.js。以下是一种这样的模板: 我将Vue的插值定界符更改为 [[]], 以避免与Django发生冲突。我的样子如下: 不幸的是,呈现的HTML包含。还有其他人遇到过类似的问题吗? 问题答案: 正如Vue v1.0的每个文档所说: 因此,在您的示例中更改为: 但是,强烈建议您使用新版本的Vue(版本2)以便保持最新!

  • 问题内容: 我的Android应用程序具有登录屏幕,并且用户登录到他的仪表板。但是我不希望用户每次关闭应用程序并启动时都进行登录(除非他们从仪表板上注销)。因此,我创建了一个类来检查用户是否登录 CheckLoggedIn.java 当用户登录时,我将布尔值更改为,并在注销时更改。但是,当我通过成功登录并关闭并再次启动进行检查时,它仍然进入LoginActivity。为什么? 编辑:现在,我明白这

  • 问题内容: 给出以下代码: 我得到以下输出: 因此,出于某种原因,密钥是试图取消对整个结构的编组,而不是仅仅应该解组。我做错了吗,或者这是json编码器中的错误?顺便说一句,正在进行1.2。 问题答案: 为什么最后没有结果 这不是解码器中的错误,而是代码中的错误。你只是将另一个地址为本地指针在。更正的代码: 语义:将地址分配给。这类似于。 的语义:将所有内容复制到指向的地方。 这项工作的一项要求是