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

Обработчик handler404

Обработчик handler404 применяется для кастомизации страницы, которая показывается пользователю при возникновении ошибки "Страница не найдена" (HTTP 404). По умолчанию Django показывает стандартную HTML-страницу с ошибкой, но вы можете переопределить это поведение, указав собственное представление (view). Обработчик настраивается в корневом файле urls.py проекта и должен принимать два аргумента: объект request и исключение exception.

Настройка обработчика

Для переопределения обработчика ошибки 404, необходимо присвоить переменной handler404 путь к вашему представлению в корневом файле URLconf. Представление должно возвращать объект HttpResponseNotFound или HttpResponse со статусом 404.

# myproject/urls.py from django.contrib import admin from django.urls import path, include from myapp.views import custom_404_view handler404 = 'myapp.views.custom_404_view' urlpatterns = [ path('admin/', admin.site.urls), path('', include('myapp.urls')), ]

В представлении вы можете полностью контролировать, какой контент будет показан пользователю при возникновении ошибки.

# myapp/views.py from django.shortcuts import render from django.http import HttpResponseNotFound def custom_404_view(request, exception): return render(request, '404.html', status=404)

Результат выполнения кода при обращении к несуществующей странице:

"Отображается кастомная страница 404"

Пример . С отладкой

Важно учитывать, что в режиме отладки (при DEBUG = True) Django использует встроенную страницу ошибки с подробной отладочной информацией. Чтобы увидеть вашу кастомную страницу, необходимо установить DEBUG = False в настройках проекта.

# myproject/settings.py DEBUG = False ALLOWED_HOSTS = ['example.com']

Также можно передавать в шаблон дополнительную информацию, например, путь запроса:

# myapp/views.py from django.shortcuts import render def custom_404_view(request, exception): context = { 'request_path': request.path, 'user': request.user, } return render(request, '404.html', context, status=404)

Использование с конвертерами

Обработчик handler404 автоматически вызывается, когда ни один URL-шаблон в проекте не совпадает с запрошенным путем. Это включает случаи, когда запрошенный путь содержит специальные символы или недопустимые значения для конвертеров.

# myapp/urls.py from django.urls import path from myapp.views import article_detail urlpatterns = [ path('articles/<int:pk>/', article_detail, name='article_detail'), ]

При обращении к странице '/articles/abc/', где вместо числа передана строка, сработает обработчик handler404, так как конвертер int не сможет преобразовать значение.

"Страница не найдена (404)"

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

  • обработчик handler500,
    который переопределяет страницу ошибки сервера
  • обработчик handler403,
    который переопределяет страницу ошибки доступа
  • обработчик handler400,
    который переопределяет страницу ошибки запроса
  • функция get_object_or_404,
    которая возвращает объект или вызывает ошибку 404
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить