Найти в Дзене
Nuances of programming

Python Django: как изменить страницу ошибки 404?

Источник: Nuances of Programming Настройка страницы ошибки 404 “Страница не найдена”  —  одна из самых любопытных практик в разработке проекта на Django: сейчас же давайте узнаем, как обработать ошибку 404 с помощью собственной страницы! 404 Page Not Found считается самым известным кодом HTTP-статуса. На стадии коммерческого использования каждый хороший Django-проект должен обрабатывать эту ошибку с помощью собственноручно настроенной страницы, создающейся за несколько простых шагов, описанных в данной статье. Не теряя времени, создадим Django-проект. Откройте консоль и напишите эти команды: $ cd Desktop
$ mkdir mysite
$ cd mysite Затем создайте Django-проект: $ django-admin startproject mysite . Запустите сервер со своим веб-приложением: $ python manage.py runserver В браузере перейдите по ссылке http://127.0.0.1:8000/ (локальный сервер, порт номер 8000): если вы увидите страницу с надписью “The install worked successfully! Congratulation!” (“Установка выполнена успешно! Поздравляем!”

Источник: Nuances of Programming

Настройка страницы ошибки 404 “Страница не найдена”  —  одна из самых любопытных практик в разработке проекта на Django: сейчас же давайте узнаем, как обработать ошибку 404 с помощью собственной страницы!

404 Page Not Found считается самым известным кодом HTTP-статуса. На стадии коммерческого использования каждый хороший Django-проект должен обрабатывать эту ошибку с помощью собственноручно настроенной страницы, создающейся за несколько простых шагов, описанных в данной статье.

Не теряя времени, создадим Django-проект. Откройте консоль и напишите эти команды:

$ cd Desktop
$ mkdir mysite
$ cd mysite

Затем создайте Django-проект:

$ django-admin startproject mysite .

Запустите сервер со своим веб-приложением:

$ python manage.py runserver

В браузере перейдите по ссылке http://127.0.0.1:8000/ (локальный сервер, порт номер 8000): если вы увидите страницу с надписью “The install worked successfully! Congratulation!” (“Установка выполнена успешно! Поздравляем!”) и картинкой ракеты, то проект успешно создан и запущен.

Стандартная страница приветствия фреймворка Django
Стандартная страница приветствия фреймворка Django

Давайте попробуем перейти на несуществующую страницу только что созданного нами сайта, например, на страницу http://127.0.0.1:8000/page

Страница Django Not Found по умолчанию
Страница Django Not Found по умолчанию

Сообщение внизу страницы гласит:

You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

Вы видите эту ошибку, потому что в вашем файле настроек Django установлено значение DEBUG = True. Измените это значение на False, и Django отобразит стандартную страницу 404.

Давайте сделаем то, что написано в отчёте об ошибке 404: отключим режим отладки Django, изменив значение константы DEBUGв файле настроек проекта settings.py, кроме этого, указываем адрес локального сервера в списке разрешенных адресов:

DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1']

Замечание! Когда вы будете располагать своё веб-приложение на хостинге для доступа к нему настоящих пользователей, вам понадобится снова изменить константу ALLOWED_HOSTS: указать приобретенный домен в качестве элемента списка.

Обновите страницу.

Страница Django Not Found 404 при значении константы DEBUG = False (при отключенном режиме разработчика)
Страница Django Not Found 404 при значении константы DEBUG = False (при отключенном режиме разработчика)

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

Создаём файл представлений views.py в папке mysite с помощью данной команды:

$ touch mysite/views.py

Действительно, немного странно  —  создавать файл views.py в каталоге проекта. Во множестве руководств говорится, что views.py хранится в директориях каждого приложения в проекте, а не в директории самого проекта, но именно такой способ создания пользовательской страницы ошибки 404 “Страница не найдена” предлагается официальной документацией Django.

Ваш Django-проект теперь должен выглядеть примерно так:

Теперь пришло время добавить функцию-представление, которая будет обрабатывать ошибку 404. В файл mysite/views.py добавьте следующие строчки кода:

from django.shortcuts import render

def page_not_found_view(request, exception): return render(request, '404.html', status=404)

Также необходимо в файлеurls.py директории Django-проекта mysite определить значение переменной handler404:

handler404 = "mysite.views.page_not_found_view"

В итоге файл mysite/urls.py должен выглядеть следующим образом:

from django.contrib import admin
from django.urls import path

urlpatterns = [
path('admin/', admin.site.urls),
]

handler404 = "django_404_project.views.page_not_found_view"

Теперь пришло время поработать с шаблоном страницы ошибки 404 “Страница не найдена”. Для этого нужно создать папку templates в директории проекта mysite, а затем добавить в эту папку файл 404.html.

$ mkdir templates $ touch templates/404.html

Теперь необходимо указать Django, где именно находится ваша папка templates, поэтому в файле settings.py, в константе TEMPLATES следует обозначить значение ключа ‘DIRS’ следующим образом:

import os

TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
},
]

Теперь, в файле шаблона 404.html, можно начинать настраивать внешний вид страницы сообщения об ошибке по своему усмотрению. Для примера сделаем её крайне простой:

<h1>404 Page Not Found</h1> <p>Моя пользовательская страница ошибки 404!</p>

Перед тем, как переключиться на вкладку браузера для проверки только что созданного шаблона  —  убедитесь, что структура вашего проекта выглядит вот так:

После проверки структуры проекта — перейдите по любому из несуществующих путей вашего сайта: пользовательский HTML-шаблон 404.html обработает их все!

Пользовательская страница ошибки “404 Page Not Found”
Пользовательская страница ошибки “404 Page Not Found”

Поздравляем  —  всё готово! Ваша собственноручно созданная страница 404 Page Not Found теперь используется каждый раз, когда пользователь обращается к несуществующему ресурсу.

Читайте также:

Читайте нас в Telegram, VK

Перевод статьи Görkem Arslan: Django: Customize 404 Error Page