Resolver404
Исключение Resolver404 является подклассом Http404 и возникает в процессе URL-диспетчеризации, когда Django не может сопоставить запрошенный путь с каким-либо URL-шаблоном в файле urls.py. Это исключение автоматически вызывает страницу ошибки 404, если оно не перехвачено и не обработано пользовательским обработчиком. Основными причинами возникновения являются неверный путь, опечатки в URL или отсутствие соответствующего маршрута в файле маршрутизации.
Синтаксис
from django.urls import Resolver404
from django.core.exceptions import Resolver404
Исключение не принимает специфических параметров конструктора и наследует стандартный механизм создания исключений Python. Обычно оно перехватывается автоматически фреймворком Django, но может быть обработано вручную для логирования или кастомизации ответа.
Пример
Рассмотрим базовый пример попытки разрешения URL, который вызывает исключение:
from django.urls import resolve
try:
match = resolve('/nonexistent-url/')
except Resolver404 as e:
print(f"Resolver404: {e}")
Результат выполнения кода:
"Resolver404: /nonexistent-url/"
Пример
Рассмотрим обработку исключения в собственном промежуточном слое для логирования:
from django.urls import resolve, Resolver404
from django.http import HttpResponseNotFound
class CustomMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
try:
response = self.get_response(request)
return response
except Resolver404 as e:
print(f"Log: URL not found - {request.path}")
return HttpResponseNotFound("Custom 404 Page")
Результат выполнения кода при обращении к несуществующему URL:
"Log: URL not found - /invalid/page/"
"Custom 404 Page"
Пример
Использование исключения для проверки существования маршрута в тестовой среде:
from django.urls import resolve, Resolver404
from django.test import TestCase
class URLTests(TestCase):
def test_resolve_url(self):
url = '/blog/2025/'
try:
match = resolve(url)
self.assertTrue(match is not None)
except Resolver404:
self.fail(f"URL {url} not resolvable")
Результат выполнения кода при успешном разрешении URL:
"."
Смотрите также
-
исключение
Http404,
которое является базовым для ошибки 404 -
исключение
NoReverseMatch,
которое возникает при ошибке обратного разрешения URL -
исключение
ViewDoesNotExist,
которое возникает при отсутствии представления -
исключение
ImproperlyConfigured,
которое возникает при некорректной конфигурации приложения