非常に単純なタスクを実行してうまく機能するテンプレートフィルターがありますが、それにデコレーターを使用したいと思います。残念ながら、デコレータは意味のない厄介なdjangoエラーを引き起こします...
動作するコード:
@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
レンダリング中に例外が発生しました:空のリストからポップ
デコレータ内にブレークポイントを設定してみましたが、呼び出されていないと確信しています...
しかし、念のためここにデコレータがあります(誰かがそれを要求することを私は知っています)
デコレータを(一時的に)何もしないモックデコレータに置き換えましたが、それでも同じエラーが発生します
def cache_function(cache_timeout):
def wrapper(fn):
def decorator(*args, **kwargs):
return fn(*args, **kwargs)
return decorator
return wrapper
編集確認済み:デコレータが取得するために発生*args
し**kwargs
ますか?pop()
フィルタがすべて少なくとも1つの引数を取るようにするために呼び出されていると思いますか?
デコレータをこれに変更すると、問題が修正されます。
def cache_function(cache_timeout):
def wrapper(fn):
def decorator(arg1, arg2):
return fn(arg1, arg2)
return decorator
return wrapper
残念ながら、それはデコレータの一般的な性質を台無しにします:/今何をすべきか?