From f4c808b7f50d6906d96593626ccdd016b0b1b96b Mon Sep 17 00:00:00 2001 From: Luke Plant Date: Sat, 23 Apr 2011 15:10:51 +0000 Subject: [PATCH] Fixed #15688 - Generic views should provide a HEAD implementation Thanks to j4mie for the report and patch! git-svn-id: http://code.djangoproject.com/svn/django/trunk@16095 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/views/generic/base.py | 2 ++ tests/regressiontests/generic_views/base.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/django/views/generic/base.py b/django/views/generic/base.py index ef74474417..4e28b5280d 100644 --- a/django/views/generic/base.py +++ b/django/views/generic/base.py @@ -44,6 +44,8 @@ class View(object): def view(request, *args, **kwargs): self = cls(**initkwargs) + if hasattr(self, 'get') and not hasattr(self, 'head'): + self.head = self.get return self.dispatch(request, *args, **kwargs) # take name and docstring from class diff --git a/tests/regressiontests/generic_views/base.py b/tests/regressiontests/generic_views/base.py index 4003bbe732..fc5cf62e43 100644 --- a/tests/regressiontests/generic_views/base.py +++ b/tests/regressiontests/generic_views/base.py @@ -101,6 +101,14 @@ class ViewTest(unittest.TestCase): self.rf.get('/', REQUEST_METHOD='FAKE') ).status_code, 405) + def test_get_and_head(self): + """ + Test a view which supplies a GET method also responds correctly to HEAD + """ + self._assert_simple(SimpleView.as_view()(self.rf.get('/'))) + response = SimpleView.as_view()(self.rf.head('/')) + self.assertEqual(response.status_code, 200) + def test_get_and_post(self): """ Test a view which only allows both GET and POST. @@ -167,6 +175,13 @@ class TemplateViewTest(TestCase): """ self._assert_about(AboutTemplateView.as_view()(self.rf.get('/about/'))) + def test_head(self): + """ + Test a TemplateView responds correctly to HEAD + """ + response = AboutTemplateView.as_view()(self.rf.head('/about/')) + self.assertEqual(response.status_code, 200) + def test_get_template_attribute(self): """ Test a view that renders a template on GET with the template name as