Commit 1985ca77 authored by Jannis Leidel's avatar Jannis Leidel
Browse files

[1.2.X] Fixed #13411 -- Made sure URL fragments are correctly handled by the...

[1.2.X] Fixed #13411 -- Made sure URL fragments are correctly handled by the next_redirect utility of the comments apps. Thanks, timesong, dpn and Julien Phalip.

Backport from trunk (r15720).

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15721 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent ac87e4f8
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -25,8 +25,15 @@ def next_redirect(data, default, default_view, **get_kwargs):
    if next is None:
        next = urlresolvers.reverse(default_view)
    if get_kwargs:
        if '#' in next:
            tmp = next.rsplit('#', 1)
            next = tmp[0]
            anchor = '#' + tmp[1]
        else:
            anchor = ''

        joiner = ('?' in next) and '&' or '?'
        next += joiner + urllib.urlencode(get_kwargs)
        next += joiner + urllib.urlencode(get_kwargs) + anchor
    return HttpResponseRedirect(next)

def confirmation_view(template, doc="Display a confirmation view."):
+24 −0
Original line number Diff line number Diff line
@@ -256,3 +256,27 @@ class CommentViewTests(CommentTestCase):
        broken_location = location + u"\ufffd"
        response = self.client.get(broken_location)
        self.assertEqual(response.status_code, 200)

    def testCommentNextWithQueryStringAndAnchor(self):
        """
        The `next` key needs to handle already having an anchor. Refs #13411.
        """
        # With a query string also.
        a = Article.objects.get(pk=1)
        data = self.getValidData(a)
        data["next"] = "/somewhere/else/?foo=bar#baz"
        data["comment"] = "This is another comment"
        response = self.client.post("/post/", data)
        location = response["Location"]
        match = re.search(r"^http://testserver/somewhere/else/\?foo=bar&c=\d+#baz$", location)
        self.failUnless(match != None, "Unexpected redirect location: %s" % location)

        # Without a query string
        a = Article.objects.get(pk=1)
        data = self.getValidData(a)
        data["next"] = "/somewhere/else/#baz"
        data["comment"] = "This is another comment"
        response = self.client.post("/post/", data)
        location = response["Location"]
        match = re.search(r"^http://testserver/somewhere/else/\?c=\d+#baz$", location)
        self.failUnless(match != None, "Unexpected redirect location: %s" % location)