ho questo decoratore, utilizzato per decorare una vista Django quando io non voglio la vista da eseguire se l'argomento share
è True
(gestita dal middleware)Aggiunta di un argomento per un decoratore
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)
Attualmente funziona così:
@no_share
def prefs(request, [...])
Ma sto volendo espandere la funzionalità un po ', in modo che possa funzionare in questo modo:
@no_share('prefs')
def prefs(request, [...])
La mia domanda è come posso modificare questa classe decoratore in modo che accetti argomenti extra?
Avrei detto, ho provato già, ma penso che Django funziona in modo diverso o qualcosa perché che non ha funzionato .Ho provato a inserire 'print" blah "' nell'iniz, ma tutto ciò che ho ottenuto è stato un po 'di bla quando ho avviato il server di sviluppo. Non più 'blah's dopo quello ... – priestc
Questo è previsto, __init__ è chiamato solo una volta, sulla definizione di ogni funzione vista decorata con questo. Il __call__ viene chiamato ogni volta che il server esegue la funzione di visualizzazione per rispondere a una richiesta. Questa risposta è nella giusta direzione, vedere la mia risposta per una risposta più completa specifica per il tuo caso. – taleinat