J'ai un filtre de gabarit qui exécute une tâche très simple et fonctionne bien, mais je voudrais utiliser un décorateur dessus. Malheureusement, le décorateur provoque une erreur de django méchant qui ne fait pas de sens ...Décorateurs sur les filtres Gabarit Django?
Code qui fonctionne:
@register.filter(name="has_network")
def has_network(profile, network):
hasnetworkfunc = getattr(profile, "has_%s" % network)
return hasnetworkfunc()
Avec Décorateur (ne fonctionne pas):
@register.filter(name="has_network")
@cache_function(30)
def has_network(profile, network):
hasnetworkfunc = getattr(profile, "has_%s" % network)
return hasnetworkfunc()
ici est l'erreur:
TemplateSyntaxError at /
Caught an exception while rendering: pop from empty list
J'ai essayé de définir des points de rupture à l'intérieur du décorateur et je suis raisonnable y confiant qu'il est même pas appelé ...
Mais juste au cas où est le décorateur ici (je sais que quelqu'un va demander)
Je remplacé le décorateur (temporairement) avec un décorateur maquette qui ne fait rien, mais je reçois toujours la même erreur
def cache_function(cache_timeout):
def wrapper(fn):
def decorator(*args, **kwargs):
return fn(*args, **kwargs)
return decorator
return wrapper
modifier CONFIRMÉ: Il est dû au fait que le décorateur prend *args
et **kwargs
? Je suppose que pop()
est appelé pour s'assurer que tous les filtres prennent au moins un argument?
changer le décorateur à ce résout le problème:
def cache_function(cache_timeout):
def wrapper(fn):
def decorator(arg1, arg2):
return fn(arg1, arg2)
return decorator
return wrapper
Malheureusement qui ruine la nature générique du décorateur:/quoi faire maintenant?