Reputation: 4328
Which is it better to use generally?
https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirect
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponseRedirect
Is there any advantage to writing:
return redirect(my_url)
over:
return HttpResponseRedirect(my_url)
Or is it a direct alias? Is there any difference? Which is more pythonic/django-nic?
Upvotes: 79
Views: 25086
Reputation: 26808
There is a difference between the two:
In the case of HttpResponseRedirect
the first argument can only be a url
.
redirect
which will ultimately return a HttpResponseRedirect
can accept a model
, view
, or url
as it's "to" argument. So it is a little more flexible in what it can "redirect" to.
I also like how redirect
is shorter. So I'd use redirect
over HttpResponseRedirect
.
Both are fine to use though.
Upvotes: 125
Reputation: 73638
From documentation -
redirect(to[, permanent=False], *args, **kwargs)
Returns anHttpResponseRedirect
to the appropriate URL for the arguments passed.
from the definition its the same. Thats what shortcuts are for. Both are one and the same.
shortcuts generally are written one level above the actual API's. So redirect
encapsulates HttpResponseRedirect
and HttpResponsePermanentRedirect
with the arg permanent=False
.
There is no major downside to using HttpResponseRedirect
over redirect
. Hope this clears it.
Upvotes: 23