Как сделать страницу 404 django
Python Django: как изменить страницу ошибки 404?
Настройка страницы ошибки 404 “Страница не найдена” — одна из любопытных практик в разработке проекта на Django: давайте узнаем, как обработать ошибку 404 с помощью собственной страницы!
404 Page Not Found считается самым известным кодом HTTP-статуса. На стадии коммерческого использования каждый хороший Django-проект должен обрабатывать эту ошибку с помощью собственноручно настроенной страницы, создающейся за несколько простых шагов, описанных в данной статье.
Не теряя времени, создадим Django-проект. Откройте консоль и напишите эти команды:
Затем создайте Django-проект:
Запустите сервер со своим веб-приложением:
В браузере перейдите по ссылке http://127.0.0.1:8000/ (локальный сервер, порт номер 8000): если вы увидите страницу с надписью “The install worked successfully! Congratulation!” (“Установка выполнена успешно! Поздравляем!”) и картинкой ракеты, то проект успешно создан и запущен.
Давайте попробуем перейти на несуществующую страницу только что созданного нами сайта, например, на страницу http://127.0.0.1:8000/page
Сообщение внизу страницы гласит:
Вы видите эту ошибку, потому что в вашем файле настроек Django установлено значение DEBUG = True. Измените это значение на False, и Django отобразит стандартную страницу 404.
Замечание! Когда вы будете располагать своё веб-приложение на хостинге для доступа к нему настоящих пользователей, вам понадобится снова изменить константу ALLOWED_HOSTS : указать приобретенный домен в качестве элемента списка.
Это и есть та самая страница, которую мы сейчас настроим с помощью собственного пользовательского шаблона.
Создаём файл представлений views.py в папке mysite с помощью данной команды:
Действительно, немного странно — создавать файл views.py в каталоге проекта. Во множестве руководств говорится, что views.py хранится в директориях каждого приложения в проекте, а не в директории самого проекта, но именно такой способ создания пользовательской страницы ошибки 404 “Страница не найдена” предлагается официальной документацией Django.
Ваш Django-проект теперь должен выглядеть примерно так:
Теперь пришло время добавить функцию-представление, которая будет обрабатывать ошибку 404. В файл mysite/views.py добавьте следующие строчки кода:
Также необходимо в файле urls.py директории Django-проекта mysite определить значение переменной handler404 :
В итоге файл mysite/urls.py должен выглядеть следующим образом:
Перед тем, как переключиться на вкладку браузера для проверки только что созданного шаблона — убедитесь, что структура вашего проекта выглядит вот так:
После проверки структуры проекта — перейдите по любому из несуществующих путей вашего сайта: пользовательский HTML-шаблон 404.html обработает их все!
Поздравляем — всё готово! Ваша собственноручно созданная страница 404 Page Not Found теперь используется каждый раз, когда пользователь обращается к несуществующему ресурсу.
Многие ресурсы имеют оформленные страницы ошибок, если происходит сбой в обработке запроса от клиента.
Для начала на сайте была сделана кастомизация наиболее часто возникающих ошибок, другие при отладке пока не попадались, но всё впереди.
Как объявлено в заголовке статьи, кастомизированы был следующие ошибки:
Кастомизация ошибок 404, 500
Для кастомизации ошибок 404 и 500 необходимо написать обработчики запросов, и достаточно написать их представления в виде метода.
В шаблоны добавляем свои кастомизированные html файлы, то есть:
В файле urls.py главного модуля сайта переопределяем обработчики по умолчанию:
В коде это выглядит так:
Опишем представления в файле views.py модуля home:
Кастомизация ошибки 403
Ошибка 403 возникает в том случае, когда не авторизованный пользователь пытается получить доступ к той части сайта, в которую доступ разрешён только авторизованным пользователям.
В Django это достигается за счёт проверки статуса пользователя и добавления на страницы защитного токена, механизм CSRF. Данная ошибка может возникнуть и в том случае, если пользователь авторизован, но совершает действия, при которых требуется проверка токена CSRF, а сам токен был потерян или не верен. Дело в том, что для корректности работы токена, необходимо добавлять в шаблоне в формах специальный тег:
В него и будет подставляться токен, но просто добавить в шаблон, его не достаточно. Прежде, чем начать рендер шаблон, необходимо добавить токен в контекст, который будет передан в шаблон. То есть,
Ну а теперь ближе к непосредственно кастомизации. Для работы csrf необходимо, чтобы в файле settings.py добавлен модуль csrf и указано представление, которое будет заниматься обработкой данной ошибки:
В шаблонах добавим error403.html, а в файле views.py пропишем обработчик представления.
Рекомендуем хостинг TIMEWEB
Рекомендуемые статьи по этой тематике
Python Django: как изменить страницу ошибки 404?
Настройка страницы ошибки 404 “Страница не найдена” — одна из самых любопытных практик в разработке проекта на Django: сейчас же давайте узнаем, как обработать ошибку 404 с помощью собственной страницы!
404 Page Not Found считается самым известным кодом HTTP-статуса. На стадии коммерческого использования каждый хороший Django-проект должен обрабатывать эту ошибку с помощью собственноручно настроенной страницы, создающейся за несколько простых шагов, описанных в данной статье.
Не теряя времени, создадим Django-проект. Откройте консоль и напишите эти команды:
Затем создайте Django-проект:
Запустите сервер со своим веб-приложением:
В браузере перейдите по ссылке http://127.0.0.1:8000/ (локальный сервер, порт номер 8000): если вы увидите страницу с надписью “The install worked successfully! Congratulation!” (“Установка выполнена успешно! Поздравляем!”) и картинкой ракеты, то проект успешно создан и запущен.
Давайте попробуем перейти на несуществующую страницу только что созданного нами сайта, например, на страницу http://127.0.0.1:8000/page
Сообщение внизу страницы гласит:
Вы видите эту ошибку, потому что в вашем файле настроек Django установлено значение DEBUG = True. Измените это значение на False, и Django отобразит стандартную страницу 404.
Замечание! Когда вы будете располагать своё веб-приложение на хостинге для доступа к нему настоящих пользователей, вам понадобится снова изменить константу ALLOWED_HOSTS : указать приобретенный домен в качестве элемента списка.
Это и есть та самая страница, которую мы сейчас настроим с помощью собственного пользовательского шаблона.
Создаём файл представлений views.py в папке mysite с помощью данной команды:
Действительно, немного странно — создавать файл views.py в каталоге проекта. Во множестве руководств говорится, что views.py хранится в директориях каждого приложения в проекте, а не в директории самого проекта, но именно такой способ создания пользовательской страницы ошибки 404 “Страница не найдена” предлагается официальной документацией Django.
Ваш Django-проект теперь должен выглядеть примерно так:
Теперь пришло время добавить функцию-представление, которая будет обрабатывать ошибку 404. В файл mysite/views.py добавьте следующие строчки кода:
Также необходимо в файле urls.py директории Django-проекта mysite определить значение переменной handler404 :
В итоге файл mysite/urls.py должен выглядеть следующим образом:
Перед тем, как переключиться на вкладку браузера для проверки только что созданного шаблона — убедитесь, что структура вашего проекта выглядит вот так:
После проверки структуры проекта — перейдите по любому из несуществующих путей вашего сайта: пользовательский HTML-шаблон 404.html обработает их все!
Поздравляем — всё готово! Ваша собственноручно созданная страница 404 Page Not Found теперь используется каждый раз, когда пользователь обращается к несуществующему ресурсу.
Django, создание настраиваемой страницы ошибок 500/404
в mysite / settings.py я включил:
в mysite / polls / urls.py:
Я могу опубликовать любой другой необходимый код, но что мне следует изменить, чтобы получить настраиваемую страницу с ошибкой 500, если я использую неправильный URL-адрес?
редактировать
РЕШЕНИЕ: у меня был дополнительный
в моем settings.py, и это вызывало проблему
Под основным views.py добавьте свою собственную реализацию следующих двух представлений и просто настройте шаблоны 404.html и 500.html с тем, что вы хотите отобразить.
С помощью этого решения не нужно добавлять специальный код в urls.py
Обновить
Чтобы вышеуказанная конфигурация работала, вы должны определить следующие переменные в своем urls.py файле и указать экспортированные переменные Django на строковый путь Python, в котором определены эти функциональные представления Django, например:
Обновление для Django 2.0
Подписи для представлений обработчиков были изменены в Django 2.0: https://docs.djangoproject.com/en/2.0/ref/views/#error-views
Если вы используете представления, как указано выше, handler404 выдаст сообщение:
«handler404 () получил неожиданный аргумент ключевого слова ‘исключение'»
В таком случае измените свои представления следующим образом:
Django 404 error-page not found
My project is named homefood, and when I runserver I get this error.Anybody have any clue how to fix this error.
My settings.py file looks like this.
and my urls.py in my homefood folder is
I think my problem is either in my urls.py, or my settings.py but I am unsure. Any help would be greatly appreciated. Thanks.
4 Answers 4
You are getting the 404 because you haven’t defined a url pattern for http://127.0.0.1:8000/ yet.
To add a url pattern for the homepage, uncomment the following entry in your urls.py, and replace homefood.views.home with the path to the view you want to use.
Basically the answer to this to add a entry in the project urls.py file as blank example:
and in the app urls.py you add this
make sure in the settings.py you include your app also make sure in the app urls.py you import your views
I had this error too and the solution was to change double quotes to single quotes for the name= parameter in the urls.py file of the concerned app!
Not directly relevant to the OP, but maybe useful for others:
My admin pages all went 404 after I accidentally removed the trailing slash from the path() route (django 3.2):
Not the answer you’re looking for? Browse other questions tagged python django http-status-code-404 django-urls or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.12.22.41046
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.