在基于类的视图中,我只是使用get_context_data
作为函数,但是为什么
class CBV (TemplateView):
def get_context_data(self,**kwargs):
context = super ().get_context_data (**kwargs)
答案 0 :(得分:1)
就像documentation on get_context_data
[Django-doc]所说:
返回代表模板上下文的字典。提供的关键字参数将构成返回的上下文。 (..)
因此,如果让函数返回字典{'foo': 42}
,则可以在模板中编写变量{{ foo }}
,然后将其替换为42
。
通常用于将各种数据传递到模板:登录的用户,表单,查询集等。然后,模板可以相应地呈现这些组件。
一个典型的用例是:
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['number'] = random.randrange(1, 100) return context
因此,此处的“子类”在上下文中添加了一个额外的元素number
。
因此,我们在此以方法解析顺序(MRO)调用下一个函数。这通常是类的父级,尽管在多重继承的情况下MRO的规则要复杂一些。原因是这些父母也可以将数据添加到上下文中。因此,通过调用父级的get_context_data
,父级将返回一个可能已经包含一些数据的字典,然后子级可以依次向context
添加更多数据(或对其进行更改) ),按相反的 MRO 顺序。但是,只有在每个子代执行一次super().get_context_data(**kwargs)
调用并修补结果(从而不构造新字典)的情况下,这种情况才会发生。