gpt4 book ai didi

django - 如何在Django中基于类的 View 中覆盖 `as_view`?

转载 作者:行者123 更新时间:2023-12-04 14:05:04 24 4
gpt4 key购买 nike

我正在尝试在我的项目中引入基于类的 View 。到目前为止看起来还不错,直到发现以下问题。

我正在使用django-navigation创建面包屑。它是这样工作的:装饰了一个 View 函数,并且这个装饰器在该函数上引入了一个称为breadcrumb的属性。在模板中,当前URL或其部分将得到解析,并检查此属性的结果 View 。如果存在,则对其进行评估,结果是面包屑文本。

由于基于类的 View 通常由as_view()方法表示,因此我似乎需要对其进行修饰,但是,由于它是一个类方法,因此我无法真正访问那里的实例,这当然是我的面包屑所依赖的。

breadcrumb中将as_view()属性附加到__init__()也不起作用,或者我弄错了语法。 编辑:当然,它不起作用,因为我将它附加到as_view上,而不是它的返回值上。

有什么想法如何正确整合面包屑装饰器和基于类的 View ?

最佳答案

我现在已经解决了这个问题。我已将breadcrumb例程放在子类的方法中,并在基本 View 中覆盖了as_view。还使用了来自实际as_view的技巧来获取self指针。

@classonlymethod
def as_view(cls, **initkwargs):
self = cls(**initkwargs)
view = super(MyBaseView, cls).as_view(**initkwargs)
if hasattr(self, 'breadcrumb') and callable(getattr(self, 'breadcrumb', None)):
return breadcrumb(self.breadcrumb)(view)
return view

关于django - 如何在Django中基于类的 View 中覆盖 `as_view`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7306117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com