mirror of
https://github.com/django/django.git
synced 2025-04-04 13:36:42 +00:00
Fixed #28331 -- Added ContextMixin.extra_context to allowing passing context in as_view().
This commit is contained in:
parent
42e91cd6f4
commit
604341c85f
@ -18,10 +18,13 @@ class ContextMixin:
|
||||
A default context mixin that passes the keyword arguments received by
|
||||
get_context_data() as the template context.
|
||||
"""
|
||||
extra_context = None
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
if 'view' not in kwargs:
|
||||
kwargs['view'] = self
|
||||
if self.extra_context is not None:
|
||||
kwargs.update(self.extra_context)
|
||||
return kwargs
|
||||
|
||||
|
||||
|
@ -156,6 +156,9 @@ MRO is an acronym for Method Resolution Order.
|
||||
|
||||
* Populated (through :class:`~django.views.generic.base.ContextMixin`) with
|
||||
the keyword arguments captured from the URL pattern that served the view.
|
||||
* You can also add context using the
|
||||
:attr:`~django.views.generic.base.ContextMixin.extra_context` keyword
|
||||
argument for :meth:`~django.views.generic.base.View.as_view`.
|
||||
|
||||
``RedirectView``
|
||||
================
|
||||
|
@ -40,6 +40,7 @@ Simple generic views
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class` [:meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_engine`
|
||||
@ -92,6 +93,7 @@ Detail Views
|
||||
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.pk_url_kwarg`
|
||||
@ -128,6 +130,7 @@ List Views
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_allow_empty`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.ordering` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_ordering`]
|
||||
@ -163,6 +166,7 @@ Editing views
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.form_class` [:meth:`~django.views.generic.edit.FormMixin.get_form_class`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.initial` [:meth:`~django.views.generic.edit.FormMixin.get_initial`]
|
||||
@ -195,6 +199,7 @@ Editing views
|
||||
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.edit.ModelFormMixin.fields`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.form_class` [:meth:`~django.views.generic.edit.ModelFormMixin.get_form_class`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
@ -238,6 +243,7 @@ Editing views
|
||||
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.edit.ModelFormMixin.fields`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.form_class` [:meth:`~django.views.generic.edit.ModelFormMixin.get_form_class`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
@ -281,6 +287,7 @@ Editing views
|
||||
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.pk_url_kwarg`
|
||||
@ -322,6 +329,7 @@ Date-based views
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.ordering` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_ordering`]
|
||||
@ -361,6 +369,7 @@ Date-based views
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.dates.YearArchiveView.make_object_list` [:meth:`~django.views.generic.dates.YearArchiveView.get_make_object_list`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
@ -403,6 +412,7 @@ Date-based views
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month` [:meth:`~django.views.generic.dates.MonthMixin.get_month`]
|
||||
@ -448,6 +458,7 @@ Date-based views
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.content_type`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.ordering` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_ordering`]
|
||||
@ -493,6 +504,7 @@ Date-based views
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day` [:meth:`~django.views.generic.dates.DayMixin.get_day`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day_format` [:meth:`~django.views.generic.dates.DayMixin.get_day_format`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month` [:meth:`~django.views.generic.dates.MonthMixin.get_month`]
|
||||
@ -542,6 +554,7 @@ Date-based views
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day` [:meth:`~django.views.generic.dates.DayMixin.get_day`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day_format` [:meth:`~django.views.generic.dates.DayMixin.get_day_format`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month` [:meth:`~django.views.generic.dates.MonthMixin.get_month`]
|
||||
@ -590,6 +603,7 @@ Date-based views
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day` [:meth:`~django.views.generic.dates.DayMixin.get_day`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day_format` [:meth:`~django.views.generic.dates.DayMixin.get_day_format`]
|
||||
* :attr:`~django.views.generic.base.ContextMixin.extra_context`
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month` [:meth:`~django.views.generic.dates.MonthMixin.get_month`]
|
||||
|
@ -7,6 +7,19 @@ Simple mixins
|
||||
|
||||
.. class:: django.views.generic.base.ContextMixin
|
||||
|
||||
**Attributes**
|
||||
|
||||
.. attribute:: extra_context
|
||||
|
||||
.. versionadded:: 2.0
|
||||
|
||||
A dictionary to include in the context. This is a convenient way of
|
||||
specifying some simple context in
|
||||
:meth:`~django.views.generic.base.View.as_view`. Example usage::
|
||||
|
||||
from django.views.generic import TemplateView
|
||||
TemplateView.as_view(extra_context={'title': 'Custom Title'})
|
||||
|
||||
**Methods**
|
||||
|
||||
.. method:: get_context_data(**kwargs)
|
||||
|
@ -189,7 +189,8 @@ Forms
|
||||
Generic Views
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
* ...
|
||||
* The new :attr:`.ContextMixin.extra_context` attribute allows adding context
|
||||
in ``View.as_view()``.
|
||||
|
||||
Internationalization
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -62,7 +62,8 @@ interface to working with templates in class-based views.
|
||||
any data they want to ensure is in there as keyword arguments.
|
||||
``get_context_data()`` returns a dictionary; in ``ContextMixin`` it
|
||||
simply returns its keyword arguments, but it is common to override this to
|
||||
add more members to the dictionary.
|
||||
add more members to the dictionary. You can also use the
|
||||
:attr:`~django.views.generic.base.ContextMixin.extra_context` attribute.
|
||||
|
||||
Building up Django's generic class-based views
|
||||
==============================================
|
||||
|
@ -343,6 +343,10 @@ class TemplateViewTest(SimpleTestCase):
|
||||
match = resolve('/template/login_required/')
|
||||
self.assertIs(match.func.view_class, TemplateView)
|
||||
|
||||
def test_extra_context(self):
|
||||
response = self.client.get('/template/extra_context/')
|
||||
self.assertEqual(response.context['title'], 'Title')
|
||||
|
||||
|
||||
@override_settings(ROOT_URLCONF='generic_views.urls')
|
||||
class RedirectViewTest(SimpleTestCase):
|
||||
|
@ -22,6 +22,8 @@ urlpatterns = [
|
||||
|
||||
url(r'^template/cached/(?P<foo>\w+)/$',
|
||||
cache_page(2.0)(TemplateView.as_view(template_name='generic_views/about.html'))),
|
||||
url(r'^template/extra_context/$',
|
||||
TemplateView.as_view(template_name='generic_views/about.html', extra_context={'title': 'Title'})),
|
||||
|
||||
# DetailView
|
||||
url(r'^detail/obj/$',
|
||||
|
Loading…
x
Reference in New Issue
Block a user