summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Sassi <ssassi@sophilabs.com>2017-08-17 18:55:58 -0300
committerTim Graham <timograham@gmail.com>2017-09-04 10:55:18 -0400
commit5848305218a08eb0c0a32086813d14dc6f46b463 (patch)
tree861ae3f64abf906f2d6fa531745543c5d04c5edc
parent0d3f567a7ace9ca688712ffea9a396e118a4a697 (diff)
Fixed #28082 -- Made BaseDateListView pass context from get_dated_items() to subclasses.
Thanks leon-matthews for the report and fix.
-rw-r--r--django/views/generic/dates.py8
-rw-r--r--tests/generic_views/test_dates.py17
2 files changed, 22 insertions, 3 deletions
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):