#21177 closed Bug (fixed)
redirect() doesn't support redirecting to relative urls
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | Core (URLs) | Version: | dev |
Severity: | Normal | Keywords: | redirect url relative |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Hi,
If we use redirect shortcut to redirect to a relative URL, it fails.
Like in this example:
from django.conf.urls import patterns, url from django.shortcuts import redirect Using redirect to red urlpatterns = patterns('', url(r'^foo/bar/$', lambda request: redirect('../baz/')), )
It raises a TypeError:
Traceback (most recent call last): File "lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response response = callback(request, *callback_args, **callback_kwargs) File "foo/foo/urls.py", line 9, in <lambda> url(r'^foo/bar/$', lambda request: redirect('../baz/')), File "lib/python2.7/site-packages/django/shortcuts/__init__.py", line 78, in redirect return redirect_class(resolve_url(to, *args, **kwargs)) File "lib/python2.7/site-packages/django/shortcuts/__init__.py", line 151, in resolve_url return urlresolvers.reverse(to, args=args, kwargs=kwargs) File "lib/python2.7/site-packages/django/core/urlresolvers.py", line 496, in reverse return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File "lib/python2.7/site-packages/django/core/urlresolvers.py", line 379, in _reverse_with_prefix lookup_view = get_callable(lookup_view, True) File "lib/python2.7/site-packages/django/utils/functional.py", line 31, in wrapper result = func(*args) File "lib/python2.7/site-packages/django/core/urlresolvers.py", line 97, in get_callable mod = import_module(mod_name) File "lib/python2.7/site-packages/django/utils/importlib.py", line 28, in import_module raise TypeError("relative imports require the 'package' argument")
However, it looks like there's support for relative URL:
- https://code.djangoproject.com/ticket/987
- https://github.com/django/django/blob/636860fbfb4e34e08749d4576bc9571028150526/django/core/handlers/base.py#L24
- https://github.com/django/django/blob/51ed1ef1d56b383210830f69594b789ab3457b95/django/shortcuts/__init__.py#L151
Here's my proposed patch in this case: https://github.com/django/django/pull/1670/files
Change History (4)
comment:1 by , 11 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:2 by , 11 years ago
comment:3 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
In e3d0790bd0b036ed3589659c1196e2c571e3dd8e:
Fixed #21177 -- Made resolve_url support relative URLs.
This fixes redirecting to relative URLs with django.shortcuts.redirect.
Note:
See TracTickets
for help on using tickets.
Is it possible to get this in master before Django 1.7?