Reputation: 4338
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: 80
Views: 25157
Reputation: 26858
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: 127
Reputation: 73718
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