在Django中基于类的视图上具有参数的函数装饰器

Bud*_*hot 14 django python-decorators

官方文档解释了如何装饰基于类的视图,但是我找不到有关如何为装饰器提供参数的任何信息.

我想实现类似的东西

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

这相当于

@mydecorator(some_parameters)
def my_view(request):
    ....
Run Code Online (Sandbox Code Playgroud)

我该如何处理这类案件?

Lui*_*lli 20

@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):
        ...
Run Code Online (Sandbox Code Playgroud)

所以,完全使用语法糖:

class MyClass(View):
    @method_decorator(mydecorator(arg1, arg2, arg...))
    def my_view(request):
        ...
Run Code Online (Sandbox Code Playgroud)