РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
364 of 818 menu

HttpResponseNotFound

Класс HttpResponseNotFound предназначен для возврата HTTP-ответа с кодом состояния 404 (Not Found). Этот класс наследуется от HttpResponse и используется для явного указания того, что запрашиваемый ресурс не найден. Класс принимает те же параметры, что и родительский класс: содержимое ответа, заголовки и другие настройки. В отличие от стандартного HttpResponse, HttpResponseNotFound автоматически устанавливает код ответа 404.

Синтаксис

HttpResponseNotFound(content='', content_type=None, status=404, charset=None, headers=None)

Пример . Использование в представлении

Создадим представление, которое возвращает ответ 404, если статья не найдена по идентификатору:

from django.http import HttpResponseNotFound from django.shortcuts import get_object_or_404 from myapp.models import Article def article_detail(request, article_id): try: article = Article.objects.get(id=article_id) return HttpResponseNotFound(f'Article #{article_id} not found') except Article.DoesNotExist: return HttpResponseNotFound(f'Article #{article_id} not found')

Пример . С контентом в виде HTML

Используем HttpResponseNotFound для возврата HTML-страницы с сообщением об ошибке:

from django.http import HttpResponseNotFound def custom_404_view(request): html_content = """ <h1>404 - Page Not Found</h1> <p>The requested page does not exist.</p> """ return HttpResponseNotFound(html_content)

Пример . С установкой заголовков

Передадим дополнительные заголовки вместе с ответом 404:

from django.http import HttpResponseNotFound def api_404_view(request): headers = { 'X-Content-Type-Options': 'nosniff', 'Cache-Control': 'no-cache' } return HttpResponseNotFound( content='{"error": "Resource not found"}', content_type='application/json', headers=headers )

Пример . Использование в классовых представлениях

Используем HttpResponseNotFound внутри классового представления:

from django.views import View from django.http import HttpResponseNotFound from myapp.models import Article class ArticleDeleteView(View): def get(self, request, article_id): try: article = Article.objects.get(id=article_id) # Выполняем какое-либо действие с article return HttpResponseNotFound(f'Article #{article_id} not found') except Article.DoesNotExist: return HttpResponseNotFound(f'Article #{article_id} not found')

Пример . Комбинирование с функциями Django

Иногда бывает полезно комбинировать HttpResponseNotFound с другими методами, например, с render:

from django.http import HttpResponseNotFound from django.shortcuts import render from myapp.models import Category def category_detail(request, category_id): try: category = Category.objects.get(id=category_id) # Предположим, что здесь используется шаблон return render(request, 'category_detail.html', {'category': category}) except Category.DoesNotExist: return HttpResponseNotFound(render(request, '404.html'))

Смотрите также

  • класс HttpResponse,
    родительский класс для всех HTTP-ответов
  • класс JsonResponse,
    возвращает JSON-ответ с соответствующими заголовками
  • класс HttpResponseForbidden,
    возвращает ответ с кодом 403 Forbidden
  • класс HttpResponseRedirect,
    возвращает ответ с кодом 302 для перенаправления
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить