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

Django模板标签调用时上下文存在的值无法找到的问题

解决Django模板过滤器的服务器错误及变量找不到问题

嘿,我一眼就瞅出几个导致你遇到内部服务器错误和变量找不到的问题,咱们一步步来修正:

1. 模板变量引用错误

你在视图里传给模板的上下文是{'company': company},但模板里却用了customer.id——模板上下文里根本没有customer这个变量啊!这就是“上下文已有的值无法找到”的直接原因。

2. 过滤器参数传递不匹配

你的is_owner过滤器定义时,第二个参数要求传入**company对象**,但模板里却传了customer.id(还是个不存在的变量)。过滤器内部是要对比user.customer.company.id和company.id,所以正确的参数应该是company对象本身。

修正后的代码示例

模板调用修正

把模板里的调用改成:

{{ user|is_owner:company }}

过滤器逻辑优化(增加健壮性)

原过滤器如果遇到用户没有绑定customer,或者customer没有绑定company的情况,会直接抛出AttributeError,咱们加上空值判断让它更稳定:

@register.filter(name='is_owner')
def is_owner(user, company):
    # 先检查必要属性是否存在,避免属性错误
    if hasattr(user, 'customer') and hasattr(user.customer, 'company'):
        return user.customer.company.id == company.id
    # 任何不符合条件的情况都返回False
    return False

额外提醒

确保user变量在模板中是可用的——Django默认会通过django.contrib.auth.context_processors.auth中间件把user注入模板上下文,如果你关闭了这个中间件,需要手动在视图的context里加上'user': request.user。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:19:49