diff options
| author | Claude Paroz <claude@2xlibre.net> | 2012-04-06 21:24:33 +0000 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2012-04-06 21:24:33 +0000 |
| commit | 8663bc110305844b2f8b0829ee2ddfc5be61b758 (patch) | |
| tree | cf59ad66ba09f07bb9ac17161f260be636e63e9a /tests | |
| parent | b4a98271339e1595fc5e362da0d1b82b3c492448 (diff) | |
Fixed #16074 -- Added ContextMixin to class-based generic views to handle get_context_data. Thanks emyller, Luke Plant, Preston Holmes for working on the ticket and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17875 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/generic_views/base.py | 19 | ||||
| -rw-r--r-- | tests/regressiontests/generic_views/tests.py | 3 | ||||
| -rw-r--r-- | tests/regressiontests/generic_views/views.py | 22 |
3 files changed, 39 insertions, 5 deletions
diff --git a/tests/regressiontests/generic_views/base.py b/tests/regressiontests/generic_views/base.py index 6528dc6723..e18ed2a2a7 100644 --- a/tests/regressiontests/generic_views/base.py +++ b/tests/regressiontests/generic_views/base.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import time from django.core.exceptions import ImproperlyConfigured @@ -6,6 +8,7 @@ from django.test import TestCase, RequestFactory from django.utils import unittest from django.views.generic import View, TemplateView, RedirectView +from . import views class SimpleView(View): """ @@ -331,3 +334,19 @@ class RedirectViewTest(unittest.TestCase): # we can't use self.rf.get because it always sets QUERY_STRING response = RedirectView.as_view(url='/bar/')(self.rf.request(PATH_INFO='/foo/')) self.assertEqual(response.status_code, 301) + + +class GetContextDataTest(unittest.TestCase): + + def test_get_context_data_super(self): + test_view = views.CustomContextView() + context = test_view.get_context_data(kwarg_test='kwarg_value') + + # the test_name key is inserted by the test classes parent + self.assertTrue('test_name' in context) + self.assertEqual(context['kwarg_test'], 'kwarg_value') + self.assertEqual(context['custom_key'], 'custom_value') + + # test that kwarg overrides values assigned higher up + context = test_view.get_context_data(test_name='test_value') + self.assertEqual(context['test_name'], 'test_value') diff --git a/tests/regressiontests/generic_views/tests.py b/tests/regressiontests/generic_views/tests.py index 72aab035a8..c985ad3309 100644 --- a/tests/regressiontests/generic_views/tests.py +++ b/tests/regressiontests/generic_views/tests.py @@ -1,6 +1,7 @@ from __future__ import absolute_import -from .base import ViewTest, TemplateViewTest, RedirectViewTest +from .base import (ViewTest, TemplateViewTest, RedirectViewTest, + GetContextDataTest) from .dates import (ArchiveIndexViewTests, YearArchiveViewTests, MonthArchiveViewTests, WeekArchiveViewTests, DayArchiveViewTests, DateDetailViewTests) diff --git a/tests/regressiontests/generic_views/views.py b/tests/regressiontests/generic_views/views.py index 5ff9cf0e65..1e70ba4b46 100644 --- a/tests/regressiontests/generic_views/views.py +++ b/tests/regressiontests/generic_views/views.py @@ -14,10 +14,9 @@ class CustomTemplateView(generic.TemplateView): template_name = 'generic_views/about.html' def get_context_data(self, **kwargs): - return { - 'params': kwargs, - 'key': 'value' - } + context = super(CustomTemplateView, self).get_context_data(**kwargs) + context.update({'key': 'value'}) + return context class ObjectDetail(generic.DetailView): @@ -184,3 +183,18 @@ class BookDetailGetObjectCustomQueryset(BookDetail): def get_object(self, queryset=None): return super(BookDetailGetObjectCustomQueryset,self).get_object( queryset=Book.objects.filter(pk=2)) + +class CustomContextView(generic.detail.SingleObjectMixin, generic.View): + model = Book + object = Book(name='dummy') + + def get_object(self): + return Book(name="dummy") + + def get_context_data(self, **kwargs): + context = {'custom_key': 'custom_value'} + context.update(kwargs) + return super(CustomContextView, self).get_context_data(**context) + + def get_context_object_name(self, obj): + return "test_name" |
