gpt4 book ai didi

python - Django / python : understanding how super is used in function

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:06 24 4
gpt4 key购买 nike

我刚刚开始思考什么是 super 以及它是如何在 Django 中基于 View 的类中实现的。我试图了解 super 在以下代码中的工作方式。有人可以帮我一 block 一 block 地分解吗?

from django.views.generic.detail import DetailView
from apps.app_name.models import Article

class ArticleDetailView(DetailView):
model = Article
template_name = 'article/show.html'

def get_context_data(self, **kwargs):
context = super(ArticleDetailView, self).get_context_data(**kwargs)
return context

最佳答案

super 方法将访问当前类并调用特定方法,在这种情况下:

super(ArticleDetailView, self)  # Access to the current class

并执行一个特定的方法:

.get_context_data(**kwargs)

View 类中的.get_context_data() 方法,返回传递给模板的context (.html文件)。在本例中,您使用的是 DetailView,因此您有一些预定义的上下文,例如:objectarticle

如果你只是覆盖 .get_context_data() 而没有调用 .super(),像这样:

def get_context_data(self, **kwargs):
my_context = {...}
return my_context

您将丢失 DetailView 上下文中的预定义变量。但是如果你想在当前DetailView的上下文中添加一些新的变量(值),你需要原始的上下文,这就是super(ArticleDetailView, self).get_context_data(** kwargs) 会给你。所以你将以这种方式使用它:

def get_context_data(self, **kwargs):
context = super(ArticleDetailView, self).get_context_data(**kwargs)
context.update({'my_key': 'my_value'})
return context

现在您将能够在模板中使用您自己的值,而不会丢失默认的 DetailView 的上下文值。

关于python - Django / python : understanding how super is used in function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34046887/

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