#django #django-views
#django #django-просмотры
Вопрос:
По-видимому, есть два разных способа вернуть ошибку 404 в Django: путем возврата HttpResponseNotFound
объекта или путем создания Http404
исключения. Хотя я использую первое в своем проекте, кажется, что внутренние представления Django в основном используют последнее. Помимо мантры «Исключение является исключительным», в чем разница между обоими способами и которые я должен использовать?
Ответ №1:
An HttpResponseNotFound
похож на обычный HttpResponse
, за исключением того, что он отправляет код ошибки 404. Итак, вам нужно отобразить соответствующую страницу 404 в этом представлении, в противном случае браузер отобразит свое собственное значение по умолчанию.
Создание Http404
исключения приведет к тому, что Django вызовет собственное представление ошибки 404. На самом деле, это делает немного больше, чем просто отображает 404.html шаблон и отправить его — используя HttpResponseNotFound
, по сути. Но удобство заключается в том, что затем вы указываете шаблон (и представление, если хотите) в одном месте.
Комментарии:
1. Ссылка на документ: docs.djangoproject.com/en/dev/topics/http/views /…
Ответ №2:
В дополнение к тому, что сказал Дэниел, создание Http404
исключения может быть более гибким, поскольку оно позволяет вам генерировать 404, например, из вспомогательной функции, расположенной глубже в вашем стеке вызовов (возможно, той, которая обычно возвращает не HttpResponse
тип) и полагаться на распространение исключений Python вместо того, чтобы создавать HttpResponseNotFound
и передавать вручнуюон возвращается к тому месту, где вы изначально создавали свой ответ.
Ответ №3:
В дополнение к тому, что сказали Дэниел и Эсмаил, для справки, это буквально определение HttpResponseNotFound
Django (v1.8):
class HttpResponseNotFound(HttpResponse):
status_code = 404
И для хорошей оценки определение Http404
:
class Http404(Exception):
pass