You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django登录后模板无法识别用户已认证的问题排查

问题:Django模板中user.is_authenticated返回值不为True的原因

以下代码运行无报错,但在模板中使用指定表达式时无法正确识别已认证用户:

views.py代码

class SignInView(View):

    def get(self, request):
        return render(request, "signin.html")

    def post(self, request):
        user = request.POST.get('username', '')
        pass = request.POST.get('password', '')

        user = authenticate(username=user, password=pass)

        if user is not None:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect('/')
            else:
                return HttpResponse("Bad user.")
        else:
            return HttpResponseRedirect('/')

模板代码

{% user.is_authenticated %}

问题原因及解决方法:

  • 模板语法错误
    你误用了模板语法:{% %}是执行模板标签(如逻辑判断、循环)的语法,而user.is_authenticated是模板变量,需要用{{ }}包裹才能输出值。如果要做条件渲染,应该用{% if user.is_authenticated %}包裹对应内容。

    正确用法示例:

    • 直接输出布尔值:{{ user.is_authenticated }}
    • 条件渲染内容:
      {% if user.is_authenticated %}
          <!-- 认证用户可见内容 -->
      {% else %}
          <!-- 未认证用户内容 -->
      {% endif %}
      
  • 检查认证中间件配置
    确保settings.py的MIDDLEWARE列表中启用了django.contrib.auth.middleware.AuthenticationMiddleware,这个中间件负责将认证用户绑定到request.user,模板才能通过user变量访问到用户对象。

    配置示例:

    'django.contrib.auth.middleware.AuthenticationMiddleware',
    
  • 确认重定向页面的上下文传递
    登录后重定向的根路径/对应的视图,需使用render函数返回响应(render默认会把request.user传入模板上下文),如果用其他方式返回响应,需要手动将user变量传入模板。

内容的提问来源于stack exchange,提问作者PrertoQuebas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:37:34