2015-01-09 11 views
10

公式は、クラスベースのビューをデコレートする方法を説明していますが、パラメータをデコレータに提供する方法に関する情報は見つかりませんでした。Djangoのクラスベースのビューにパラメータを持つ関数デコレータ

私はこのような場合に対処するにはどうすればよい

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

と同等でなければなりません

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

ような何かを達成したいと思いますか?

+0

はhttp://stackoverflow.com/questions/5929107/python-んデコレータとパラメータのヘルプ? – jcfollower

+0

クラスベースのビューをカバーしていないためではありません。 – Buddyshot

答えて

15

@method_decoratorは、パラメータとしての機能をとる。パラメータ付きのデコレータを渡す場合は、次のようにするだけです。

  • decorator-creator関数のパラメータを評価します。
  • 評価値を@method_decoratorに渡します。明示的なPythonコードで

これは次のようになります。だから、

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

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

、完全にシンタックスシュガーを使用して:

class MyClass(View): 
    @method_decorator(mydecorator(arg1, arg2, arg...)) 
    def my_view(request): 
     ... 
関連する問題