Django поднимает исключение для ошибки wont override для HttpResponse

Я использую Django для создания пользовательских обработчиков страниц ошибок 400, 403, 404, 500. Но по какой-то причине, когда страница возвращает ошибку HttpResponse, она не направляет меня на мою страницу шаблона ошибки django, вместо этого она показывает следующее. Этот django может найти url и перейти в функцию просмотра, но мы возвращаем HttpResponse 404 он не найден. Error in HttpResponse404 Например, http://127.0.0.1:8000/404/, это приведет к странице настройки, потому что Django не может найти этот url в нашем проекте

error page with own template

### views.py
from django.shortcuts import render
def page_not_found_view(request, exception):

   return render(request, 'error.html',status = 404,context = {
        'status_code' : 404,
        'message' : "The page you were looking for doesn't exist anymore.",
        'title' : "Page Not Found"
    })

def internal_server_error_view(request,  *args, **argv):

   return render(request, 'error.html',status = 500,context = {
        'status_code' : 500,
        'message' : "500 Internal Server Error.",
        'title' : "Internal Server Error"
    })

def forbidden_error_view(request, exception):

   return render(request, 'error.html',status = 403,context = {
        'status_code' : 403,
        'message' : "403 Forbidden Error.",
        'title' : "Forbidden Error"
    })

def bad_request_error_view(request, exception):

   return render(request, 'error.html',status = 400,context = {
        'status_code' : 400,
        'message' : "400 Bad Request Error.",
        'title' : "Bad Request"
    })
    
### urls.py
hanlder400 = "gotani.views.bad_request_error_view"
handler404 = "gotani.views.page_not_found_view"
handler403 = "gotani.views.forbidden_error_view"
handler500 = "gotani.views.internal_server_error_view"



Из документации:

Для удобства и потому, что неплохо иметь согласованную страницу ошибки 404 на всем вашем сайте, Django предоставляет исключение Http404. Если вы поднимете Http404 в любой точке функции представления, Django поймает его и вернет стандартную страницу ошибки для вашего приложения вместе с HTTP кодом ошибки 404.

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

raise Http404("Poll does not exist")

Помните, что для этого нет необходимости использовать внешние пакеты. Вы можете просто добавить страницу 404.html на уровне корня шаблона, и Django будет автоматически обслуживать ее, когда встретит 404 error. То же самое справедливо и для других кодов ошибок.

Вернуться на верх