关于get_context_data()的Django

时间:2017-04-15 08:36:16

标签: django

我正在查看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

它和我编写的第一个代码一样。

1 个答案:

答案 0 :(得分:1)

这两行代码将视图作为变量添加到上下文中(如果它尚不存在)。大多数人从不使用它,但你可以这样做:

class SomeView(TemplateView):
    template_name = "something.html"
    title = "My list of books"

    def books(self):       #custom method
        return Book.objects.all()

然后在您的模板中,您可以通过视图变量引用books方法和title属性:

<h1>{{ view.title }}</h1>
<ul>
  {% for book in view.books %}
    <li>{{ book }}</li>
  {% enfor %}
<ul>

啊,是的,请注意,在这种情况下你甚至不需要自定义的get_context_data()方法