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
相关产品推荐
相关产品推荐

