我有一个模板过滤器,它可以执行一个非常简单的任务,并且工作得很好,但是我想在它上面使用一个装饰器。不幸的是,decorator导致了一个严重的django错误,这个错误没有任何意义。。。在
有效代码:
@register.filter(name="has_network")
def has_network(profile, network):
hasnetworkfunc = getattr(profile, "has_%s" % network)
return hasnetworkfunc()
使用Decorator(不起作用):
^{pr2}$错误如下:
TemplateSyntaxError at /
Caught an exception while rendering: pop from empty list
我试着在室内设置断点,我有理由相信它甚至不会被称为。。。在
但万一这里有装修工(我知道有人会要求的)
我将decorator(临时)替换为一个什么也不做的mock decorator,但是我仍然得到相同的错误
def cache_function(cache_timeout):
def wrapper(fn):
def decorator(*args, **kwargs):
return fn(*args, **kwargs)
return decorator
return wrapper
编辑已确认:这是因为decorator使用*args
和{pop()
是为了确保所有过滤器都至少使用一个参数?在
将decorator更改为这样可以解决问题:
def cache_function(cache_timeout):
def wrapper(fn):
def decorator(arg1, arg2):
return fn(arg1, arg2)
return decorator
return wrapper
不幸的是,这破坏了装饰者的一般性质:/现在该怎么办?在
最后一个答案:向decorator添加一个额外的参数,指示要修饰的内容
也许还有更优雅的东西,但这很管用。在
相关问题 更多 >
编程相关推荐