我正在查看 django 源代码以了解super(ExampleView, self).get_context_data(**kwargs)
以及为什么在我看来使用它:
class ExampleView(TemplateView):
# ... atributes
def get_context_data(self, **kwargs):
context = super(ExampleView, self).get_context_data(**kwargs)
context['key'] = 'value'
return context
我发现:
class ContextMixin(object):
"""
A default context mixin that passes the keyword arguments received by
get_context_data as the template context.
"""
def get_context_data(self, **kwargs):
if 'view' not in kwargs:
kwargs['view'] = self
return kwargs
我无法弄清楚那种情况或kwargs['view'] = self
做什么。
我已经尝试在get_context_data()
没有默认条件的情况下覆盖:
class ExampleView(TemplateView):
# .. atributes
def get_context_data(self, **kwargs):
kwargs['key'] = 'value'
return kwargs
它的工作原理与我编写的第一个代码相同。
如果视图尚不存在,那两行代码将视图作为变量添加到上下文中。大多数人从不使用它,但你可以这样做:
class SomeView(TemplateView):
template_name = "something.html"
title = "My list of books"
def books(self): #custom method
return Book.objects.all()
然后在您的模板中,您可以通过 view 变量引用 books 方法和 title 属性:
<h1>{{ view.title }}</h1>
<ul>
{% for book in view.books %}
<li>{{ book }}</li>
{% enfor %}
<ul>
是的,请注意,在这种情况下,您甚至不需要自定义 get_context_data() 方法
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句