在 Django 中基于 class 的视图上带有参数的函数装饰器
Function decorators with parameters on a class based view in Django
官方documentation解释了如何装饰基于class的视图,但是我找不到任何关于如何向装饰器提供参数的信息.
我想实现类似的目标
class MyView(View):
@method_decorator(mydecorator, some_parameters)
def dispatch(self, *args, **kwargs):
return super(MyView, self).dispatch(*args, **kwargs)
应该等同于
@mydecorator(some_parameters)
def my_view(request):
....
遇到这种情况怎么办?
@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):
...
官方documentation解释了如何装饰基于class的视图,但是我找不到任何关于如何向装饰器提供参数的信息.
我想实现类似的目标
class MyView(View):
@method_decorator(mydecorator, some_parameters)
def dispatch(self, *args, **kwargs):
return super(MyView, self).dispatch(*args, **kwargs)
应该等同于
@mydecorator(some_parameters)
def my_view(request):
....
遇到这种情况怎么办?
@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):
...