python - 如何在 django 的子类中使用与父类不同的装饰器?
问题描述
我有 2 个基于类的视图MyFirstView
和MySecondView
. 我希望这两个视图使用彼此不同的装饰器。我已经在谷歌上搜索了将近一个小时的解决方案,但仍然找不到任何答案。所以我在这里寻求帮助。
@method_decorator(my_first_decorator, name="dispatch")
class MyFirstView(UpdateView):
# some attributes
# some methods
@method_decorator(my_second_decorator, name="dispatch")
class MySecondView(MyFirstView):
# some attributes
我一直在尝试为上面显示的视图提供不同的装饰器,但由于某种原因MySecondView
仍在使用MyFirstView
's 装饰器。
我也试图覆盖调度方法,但没有任何成功。
class MyFirstView(UpdateView):
@method_decorator(my_first_decorator)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
# some attributes
# some methods
class MySecondView(MyFirstView):
@method_decorator(my_second_decorator)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
# some attributes
解决方案
第二种方法似乎是正确的,但您必须跳过 MRO 中的一个父级:
class MySecondView(MyFirstView):
@method_decorator(my_second_decorator)
def dispatch(self, *args, **kwargs):
return super(MyFirstView, self).dispatch(*args, **kwargs)
这样,super
调用简单的未修饰的原始实现,而不是来自其直接超类的受污染的实现。
推荐阅读
- android - Can't install Android emulator for IntelliJ on Windows, possibly due to path error
- unity3d - 在运行时设置 OnAutomaticHitTest 和 OnInteractiveHitTest
- r - 每组,选择第一行和另一个匹配条件的行
- javascript - 如果没有传入任何值,那么在构造函数中为属性设置备份值是否不好?
- java - HP Audit 的 Log Forging 问题
- terraform - Terraform:动态创建资源列表
- python - 不和谐的颜色值 - python
- javascript - 如何在javascript中使用数组填充显示用户输入的文本或数字?
- javascript - 带有回调 httpUploadProgress 的 AWS 开发工具包 JavaScript Promise
- gekko - 如何在为 cstr 操作两个变量时使用 gekko 控制两个变量?