매우 간단한 작업을 수행하고 잘 작동하는 템플릿 필터가 있지만 여기에 데코레이터를 사용하고 싶습니다. 데코레이터장고 템플릿 필터 데코레이터?
@register.filter(name="has_network")
def has_network(profile, network):
hasnetworkfunc = getattr(profile, "has_%s" % network)
return hasnetworkfunc()
이 (작동하지 않습니다) : 여기
@register.filter(name="has_network")
@cache_function(30)
def has_network(profile, network):
hasnetworkfunc = getattr(profile, "has_%s" % network)
return hasnetworkfunc()
불행하게도 장식은 이해가되지 않습니다 불쾌한 장고 오류 ... 작동
코드의 원인 오류입니다 :
TemplateSyntaxError at /
Caught an exception while rendering: pop from empty list
데코레이터 내부에 중단 점을 설정하려고했는데 합리적인 이유가 있습니다. 그것도라고하지 않을 것을 확신 Y ...
하지만 단지의 경우 여기
내가 모의 장식으로 장식을 (일시적으로) 대체 (I 누군가가 묻습니다 알고) 데코레이터이다 그 아무것도하지 않는,하지만 난 아직 확인했다 같은 오류
def cache_function(cache_timeout):
def wrapper(fn):
def decorator(*args, **kwargs):
return fn(*args, **kwargs)
return decorator
return wrapper
편집 를 얻을 수 : 데코레이터가 *args
및 **kwargs
필요하기 때문에이 발생? 나는 적어도 하나의 arg를 취하는 필터를 보장하기 위해 pop()
이 호출되고 있다고 가정한다.
이 문제 해결에 장식을 변경 :
def cache_function(cache_timeout):
def wrapper(fn):
def decorator(arg1, arg2):
return fn(arg1, arg2)
return decorator
return wrapper
그러나 불행하게도이 장식의 일반적인 특성 유적 : 지금 무엇을 /를?