#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 , 12 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:2 by , 12 years ago
comment:3 by , 12 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?