diff --git a/django/views/generic/dates.py b/django/views/generic/dates.py index 3b55014e73..5e0247474d 100644 --- a/django/views/generic/dates.py +++ b/django/views/generic/dates.py @@ -297,9 +297,11 @@ class BaseDateListView(MultipleObjectMixin, DateMixin, View): def get(self, request, *args, **kwargs): self.date_list, self.object_list, extra_context = self.get_dated_items() - context = self.get_context_data(object_list=self.object_list, - date_list=self.date_list) - context.update(extra_context) + context = self.get_context_data( + object_list=self.object_list, + date_list=self.date_list, + **extra_context + ) return self.render_to_response(context) def get_dated_items(self): diff --git a/tests/generic_views/test_dates.py b/tests/generic_views/test_dates.py index ff3b09ddf3..054ec7d223 100644 --- a/tests/generic_views/test_dates.py +++ b/tests/generic_views/test_dates.py @@ -1,4 +1,5 @@ import datetime +from unittest import mock from django.core.exceptions import ImproperlyConfigured from django.test import TestCase, override_settings, skipUnlessDBFeature @@ -274,6 +275,22 @@ class YearArchiveViewTests(TestDataMixin, TestCase): res = self.client.get('/dates/books/2011/') self.assertEqual(list(res.context['date_list']), list(sorted(res.context['date_list']))) + @mock.patch('django.views.generic.list.MultipleObjectMixin.get_context_data') + def test_get_context_data_receives_extra_context(self, mock): + """ + MultipleObjectMixin.get_context_data() receives the context set by + BaseYearArchiveView.get_dated_items(). This behavior is implemented in + BaseDateListView.get(). + """ + BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0)) + with self.assertRaisesMessage(TypeError, 'context must be a dict rather than MagicMock.'): + self.client.get('/dates/booksignings/2008/') + args, kwargs = mock.call_args + # These are context values from get_dated_items(). + self.assertEqual(kwargs['year'], datetime.date(2008, 1, 1)) + self.assertIsNone(kwargs['previous_year']) + self.assertIsNone(kwargs['next_year']) + @override_settings(ROOT_URLCONF='generic_views.urls') class MonthArchiveViewTests(TestDataMixin, TestCase):