Je possède ce décorateur, utilisé pour décorer une vue django quand je ne veux pas la vue à exécuter si l'argument share
est True
(géré par middleware)Ajout d'un argument à un décorateur
class no_share(object):
def __init__(self, view):
self.view = view
def __call__(self, request, *args, **kwargs):
"""Don't let them in if it's shared"""
if kwargs.get('shared', True):
from django.http import Http404
raise Http404('not availiable for sharing')
return self.view(request, *args, **kwargs)
Il actuellement fonctionne comme ceci:
@no_share
def prefs(request, [...])
Mais je suis désireux d'étendre la fonctionnalité un peu, de sorte que cela fonctionne comme ceci:
@no_share('prefs')
def prefs(request, [...])
Ma question est comment puis-je modifier cette classe de décorateur afin qu'il accepte des arguments supplémentaires?
je l'ai mentionné, j'ai essayé déjà, mais je pense que django fonctionne différemment ou quelque chose parce que ne fonctionne pas .J'ai essayé de mettre "print" blah "' dans l'init, mais tout ce que j'ai eu était un tas de 'blah's' quand j'ai démarré le serveur de dev. Plus de 'bla après ça ... – priestc
C'est normal, __init__ n'est appelé qu'une seule fois, à la définition de chaque fonction de vue que vous décorez avec ceci. Le __call__ est appelé chaque fois que votre serveur exécute la fonction de vue pour répondre à une demande. Cette réponse est dans la bonne direction, voir ma réponse pour une réponse plus complète spécifique à votre cas. – taleinat