2015-01-09 17 views
10

Il funzionario documentation spiega come decorare una vista basata di classe, ma non riuscivo a trovare tutte le informazioni su come fornire parametri al decoratore.decoratori funzione con parametri su una vista basata classe Django

vorrei realizzare qualcosa di simile

class MyView(View): 
    @method_decorator(mydecorator, some_parameters) 
    def dispatch(self, *args, **kwargs): 
     return super(MyView, self).dispatch(*args, **kwargs) 

che dovrebbe essere equivalente a

@mydecorator(some_parameters) 
def my_view(request): 
    .... 

Come faccio a trattare con questi casi?

+0

fa http://stackoverflow.com/questions/5929107/python- aiuto decoratori-con-parametri? – jcfollower

+0

Non proprio perché non copre le viste basate sulla classe. – Buddyshot

risposta

15

@method_decorator accetta una funzione come parametro. Se si desidera passare un decoratore con i parametri, è necessario solo per:

  • valutare i parametri nella funzione decoratore-creatore.
  • Passare il valore valutato a @method_decorator.

Nel codice Python esplicito questo sarebbe:

decorator = mydecorator(arg1, arg2, arg...) 
method_dec = method_decorator(decorator) 

class MyClass(View): 
    @method_dec 
    def my_view(request): 
     ... 

Quindi, utilizzando completamente lo zucchero sintattico:

class MyClass(View): 
    @method_decorator(mydecorator(arg1, arg2, arg...)) 
    def my_view(request): 
     ... 
Problemi correlati