#18558 closed New feature (fixed)
Supply `url` property to `HttpResponseRedirect` and `HttpResponsePermanentRedirect`
Reported by: | Ram Rachum | Owned by: | Claude Paroz |
---|---|---|---|
Component: | HTTP handling | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | hirokiky@… | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Currently the way to get the URL that a HttpResponseRedirect
is redirecting to requires doing response['Location']
. This is not so intuitive. There's no reason to remember the HTML header name when dealing with a redirect response.
Instead I propose this property:
url = property(lambda self: self['Location'])
Change History (15)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
Description: | modified (diff) |
---|---|
Triage Stage: | Unreviewed → Accepted |
Type: | Uncategorized → New feature |
Formatting updates.
comment:4 by , 12 years ago
Cc: | added |
---|
https://github.com/django/django/pull/657
I opened a pull-request. Fixed the implementation and tests.
comment:5 by , 12 years ago
Needs documentation: | set |
---|---|
Patch needs improvement: | set |
comment:6 by , 12 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:7 by , 12 years ago
Needs documentation: | unset |
---|---|
Patch needs improvement: | unset |
I added the documentaiton and tests.
comment:8 by , 12 years ago
Owner: | changed from | to
---|---|
Triage Stage: | Accepted → Ready for checkin |
comment:9 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:10 by , 12 years ago
Thanks coolRR and claudep.
I am glad to contribute to Django at first time.
comment:12 by , 10 years ago
Hi, I think this change is incorrect.
It makes HttpResponse(status=302, content='Foo') behave differently to HttpResponseRedirect(content='Foo').
This can be seen by using the test client, and asking it to follow redirects. It will attempt to access the url property on the response, but because the response is a redirect that is not derived from HttpResponseRedirectBase, this will fail.
comment:13 by , 10 years ago
Resolution: | fixed |
---|---|
Status: | closed → new |
comment:14 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
HttpResponseRedirect(content='Foo')
is not valid, the redirect_to
parameter being mandatory. I think that the proper answer would be not to use a plain HttpResponse
for an HTTP redirection. If you have a valid use case for using an HttpResponse(status=302)
instead of an HttpResponseRedirect
, please open a new ticket (where you can reference this one).
comment:15 by , 10 years ago
If creating a redirect manually from a HttpResponse is incorrect, why is it possible to create a HttpResponse with status 301, 302, 303 or 307?
The problem is that the test client uses both the API of HttpResponse to check whether the response is a redirect or not, and then it uses the API of HttpResponseRedirectBase to determine the redirection location. You think that is not a bug?
It only comes around because someone has decided that knowing the URL for a redirect is in the Location header is needless knowledge, it is better to instead learn a distinct API just for this framework. Also, lets make it so that that API prevents previously working and still currently documented as working code from being treated correctly, and ignore bug reports on it because pseudo code didn't have all the arguments specified.
Yay progress!
Sorry for the butchered Python, I meant: