我正在尝试定义lru_cache
- ed模板过滤器。
Django检查功能代码以验证模板中过滤器调用的适当性,但lru_cache
涵盖了我的真实签名,因此调用此类过滤器总是失败
%s requires 0 arguments, %d provided
错误。
Django 1.8.11,Python 2.7.10。意味着我没有functools.lru_cache
,而是使用Django的兼容版本:django.utils.functional.lru_cache
。
示例:
from django.tepmlate import Library
from django.utils.functional import lru_cache
register = Library()
@register.filter
@lru_cache()
def my_filter(foobar):
# do complex foobar stuff..
return foobar ** 2
我认为functools.wraps
能够以某种方式帮助我,但它只对浅层内省有好处 - 像__name__
等属性,或者我的“wraps
- fu”很弱。
显然我可以用lru_cache
定义一个单独的函数,并在真正的过滤函数中正常调用它:
@lru_cache()
def _my_filter(foobar):
# do complex foobar stuff...
return foobar ** 2
@register.filter
def my_filter(foobar):
return _my_filter(foobar)
问题:有更优雅的方法吗?例如,不必创建另一个函数?