Commit ea6b95db authored by George Hickman's avatar George Hickman Committed by Claude Paroz
Browse files

Fixed #19316 -- Set View args/kwargs/request before dispatch

parent 71a3162a
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -62,6 +62,9 @@ class View(object):
            self = cls(**initkwargs)
            if hasattr(self, 'get') and not hasattr(self, 'head'):
                self.head = self.get
            self.request = request
            self.args = args
            self.kwargs = kwargs
            return self.dispatch(request, *args, **kwargs)

        # take name and docstring from class
@@ -80,9 +83,6 @@ class View(object):
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        self.request = request
        self.args = args
        self.kwargs = kwargs
        return handler(request, *args, **kwargs)

    def http_method_not_allowed(self, request, *args, **kwargs):
+11 −0
Original line number Diff line number Diff line
@@ -216,6 +216,17 @@ class ViewTest(unittest.TestCase):
        response_allows = set(response['Allow'].split(', '))
        self.assertEqual(set(expected_methods + ('OPTIONS',)), response_allows)

    def test_args_kwargs_request_on_self(self):
        """
        Test a view only has args, kwargs & request once `as_view`
        has been called.
        """
        bare_view = InstanceView()
        view = InstanceView.as_view()(self.rf.get('/'))
        for attribute in ('args', 'kwargs', 'request'):
            self.assertNotIn(attribute, dir(bare_view))
            self.assertIn(attribute, dir(view))


class TemplateViewTest(TestCase):
    urls = 'regressiontests.generic_views.urls'