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

Django模板中user.is_authenticated失效,需在哪导入相关内容?

解决Django Inclusion Tag中user.is_authenticated不生效的问题

嘿,我来帮你搞定这个问题!你遇到的核心问题是:默认情况下,Django的inclusion_tag不会自动传递当前请求的上下文(包括user对象),所以你的模板里拿不到user变量,自然user.is_authenticated就失效了。

最简单的修复方法

你只需要修改menu_tags.py中的模板标签定义,让它接收上下文并把user传递给模板:

修改后的menu_tags.py代码:

from django import template
from menu.models import Button

register = template.Library()

# 给inclusion_tag加上takes_context=True参数
@register.inclusion_tag('menu/home.html', takes_context=True)
def show_menu(context):
    buttons = Button.objects.all()
    # 从上下文里取出user,传递给模板
    return {
        'buttons': buttons,
        'user': context['user']
    }

为什么这样管用?

  • takes_context=True告诉Django:这个模板标签需要访问当前的模板上下文(里面包含了request、user这些全局变量)。
  • 函数的第一个参数变成context,我们从里面取出user对象,再把它放到返回的字典里,这样你的home.html模板就能正常访问user.is_authenticated了。

更灵活的备选方案

如果你想让模板能用到上下文里的所有变量(不只是user),可以直接把buttons添加到上下文里再返回:

@register.inclusion_tag('menu/home.html', takes_context=True)
def show_menu(context):
    context['buttons'] = Button.objects.all()
    return context

这样你的模板不仅能用user,还能用到其他已经在上下文里的变量,比如request、messages等。

验证一下

修改完代码后,重启你的Django服务,再刷新页面,模板里的{% if user.is_authenticated %}就能正常判断用户是否登录了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:32:24