Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between returning a `HttpResponseNotFound` and raising a `Http404` in Django?

There are apparently two different ways to return a 404 error in Django: by returning a HttpResponseNotFound object or by raising an Http404 exception. While I'm using the former in my project, it seems that Django's internal views are mostly using the latter. Apart from the "Exception is exceptional" mantra, what's the difference between both ways and which should I be using?

like image 253
Nikolai Prokoschenko Avatar asked Oct 10 '11 08:10

Nikolai Prokoschenko


1 Answers

An HttpResponseNotFound is just like a normal HttpResponse except it sends error code 404. So it's up to you to render an appropriate 404 page in that view, otherwise the browser will display its own default.

Raising an Http404 exception will trigger Django to call its own 404 error view. Actually, this does little more than render the 404.html template and send it - using HttpResponseNotFound, in fact. But the convenience is that you're then specifying the template (and view, if you like) in one place.

like image 90
Daniel Roseman Avatar answered Oct 15 '22 19:10

Daniel Roseman