Как кастомизировать 404 и 500 страницы ответов в Django

Часы
12.04.2025
Часы
15.04.2025
Часы
3 минуты
Глазик
70
Сердечки
0
Соединённые точки
0
Соединённые точки
0
Соединённые точки
0

Предварительная настройка проекта

Перед тем, как начать добавлять кастомные страницы для 404 и 500 ответов, нужно будет настроить ваш проект.
Во-первых, сделать и добавить директорию с шаблонами в список директорий, та что в settings.py. И если твои директории с шаблонами называются templates/, то ничего менять не придётся. Но если ты их называешь по другому, сделай следующее:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'custom-templates-directory/'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Добавь новый путь в DIRS. Этот код ты можешь найти в файле settings.py.
Во-вторых, перевести сайт в "боевой" режим, то есть отключить все отладочные процессы, которые Django проводит при Debug=True в settings.py. Так же потребуется добавить имя хоста в ALLOWED_HOSTS:
DEBUG = False

ALLOWED_HOSTS = ['*']
Я использую специальный символ, который как бы говорит, хей, данный сервер доступен с любого адреса, наслаждайтесь! Не забудь удалить данный специальный символ после отладки или после развёртывания на настоящем сервере.
Делаем мы это, только потому что нам нужно увидеть результат наших изменений. И если этого не сделать, то мы постоянно будем получать вот такие вот страницы, в независимости от того что мы сделаем дальше:
И на этом, как бы всё, но не совсем. Если, конечно, твой сайт ещё не стилизован, то можешь смело пропустить эту главу до конца. Но давай честно, скорее всего у тебя уже есть некоторая стилизация на сайте и именно поэтому ты читаешь данную статью. Потому что хочешь завершить вёрстку/стилизацию сайта, если конкретнее то вёрстку/стилизацию 404, 500 и прочих ответов с сервера.
И проделав все выше описанные шаги, ты ожидаешь увидеть что-то вроде этого:
Все стили и скрипты загрузились и применились, красота ⊂(・ω・*⊂)
Но ты увидишь, что-то вроде этого:
Клиенту не удалось получить статические файлы с сервера. Что и подтверждает консоль разработчика. Итак, как же нам получить стили, скрипты и медиа с сервера?
Чтобы исправить это, нужно немного изменить команду запуска сервера разработки. А именно запустить сервер без всяких защитных механизмов, то есть, вместо команды:
python manage.py runserver
Ты должен использовать:
python manage.py runserver --insecure
Теперь, все статические и медиа файлы должны быть доступны во время запуска "боевого" сервера. Ты ведь помнишь, что мы это делаем, для того чтобы видеть наши собственные страницы ответов 404 и 500?

Собственная 404 страница и прочие страницы ответов сервера

Есть несколько вариантов кастомизировать 404 страницу. Первый, самый простой, это сделать шаблон 404.html в любой templates/ директории в любом приложении.
Если хочешь чтобы Django использовал другое название поменяй значение глобальной переменной в settings.py. С ERROR_404_TEMPLATE_NAME="404.html" на ERROR_404_TEMPLATE_NAME="EXAMPLE_404.html".
То же самое применимо и к таким ответам сервера как 500, 403 и 400.
Второй способ предлагает большую кастомизацию, чем первый. Итак, если нужно ещё сильнее кастомизировать страницы с ответами сервера 400, 403, 404 и 500, можно написать собственное представление и добавить туда всё что пожелаешь. Напишем самое базовое представление для ответа 404, в файле по пути Backend/views.py:
def page_not_found(request, exception):
return render(request, '404.html', status=404)
Осталось только его подключить к особенному обработчику. В urls.py, в любом приложении, в моём случае это всегда Backend приложение, добавь такую вот строчку:
handler404 = "Backend.views.page_not_found"
Есть так же обработчики 500, 403 и 400 ответов сервера, им соответствуют handler500, handler403 и handler400 соответственно. Хочу заметить, что для кодов 4хх, представления должны принимать 2 аргумента - запрос и исключение. А для 5хх только запрос.

Вместо заключения

Вот такие вот два способа я знаю, для использования собственный страниц ответов с сервера, как 404 или 500. Первый конечно же предпочтительней, ибо он проще, а значит можно допустить меньше ошибок. Второй более кастомизируемый и гибкий.
И ещё, когда закончишь с отладкой, верни всё в исходное состояние. То есть, DEBUG=True и очисти ALLOWED_HOSTS. Надеюсь эта статья была тебе полезна.

Комментарии

(0)

captcha
Отправить
Сейчас тут пусто. Буть первым (o゚v゚)ノ

Другое

Похожие статьи


О дупликатах и неканонических страницах при имплементации пагинатора

Часы
02.03.2025
Глазик
65
Сердечки
0
Соединённые точки
0
Соединённые точки
0
Соединённые точки
0
В этой статье я на примере своего сайта покажу, что такое дублированный(не канонический) контент появившийся в Google search console в результате внедрения пагинатора или бесконечной ленты. Со статистикой и графикой. …

Как сделать кнопку загрузки контента используя Django, REST API, HTMx

Часы
01.04.2025
Глазик
52
Сердечки
0
Соединённые точки
0
Соединённые точки
0
Соединённые точки
0
В этой статье я опишу способ, как можно реализовать асинхронную загрузку контента(статей) при помощи кнопки "Больше", которая сделана при помощи Django, REST API, HTMx и стилизовано при помощи DaisyUI

Как сделать простой пагинатор на Django и HTMx ч. 1

Часы
02.04.2025
Глазик
62
Сердечки
0
Соединённые точки
0
Соединённые точки
0
Соединённые точки
0
В этой статье я опишу то, как создать пагинатор используя Django и HTMx библиотеку. И то, почему это было так просто в сравнении с пагинатором на моём сайте. С шаблонами …

Как сделать простой пагинатор на Django и HTMx. Добавляем сортировку и фильтры ч. 2

Часы
08.04.2025
Глазик
47
Сердечки
0
Соединённые точки
0
Соединённые точки
0
Соединённые точки
0
В этой статье я опишу процесс и основные блоки кода, для того чтобы добавить сортировку и фильтрацию к пагинатору. Данный пагинатор написан на Django используя HTMx.

Как добавить форму обратной связи на Django, HTMx

Часы
11.04.2025
Глазик
37
Сердечки
0
Соединённые точки
0
Соединённые точки
0
Соединённые точки
0
В этой статье, я опишу как добавить на ваш Django-сайт форму обратной связи используя HTMx и немного DaisyUI, в качестве UI-библиотеки. Всё будет сделано на примере моего нового сайта. Но …

Как добавить карту сайта, sitemap на Django сайт

Часы
17.04.2025
Глазик
22
Сердечки
0
Соединённые точки
0
Соединённые точки
0
Соединённые точки
0
В этой статье я опишу самый простой и понятный способ добавления карты сайта(sitemap) к Django сайту. Тут ты найдёшь три различных типа имплементации карт сайта, для статических страниц, для страниц …

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


Релевантные вопросы