Resolver404

Исключение Resolver404 является подклассом Http404 и возникает в процессе URL-диспетчеризации, когда Django не может сопоставить запрошенный путь с каким-либо URL-шаблоном в файле urls.py. Это исключение автоматически вызывает страницу ошибки 404, если оно не перехвачено и не обработано пользовательским обработчиком. Основными причинами возникновения являются неверный путь, опечатки в URL или отсутствие соответствующего маршрута в файле маршрутизации.

Синтаксис

pythonfrom django.urls import Resolver404
from django.core.exceptions import Resolver404

Исключение не принимает специфических параметров конструктора и наследует стандартный механизм создания исключений Python. Обычно оно перехватывается автоматически фреймворком Django, но может быть обработано вручную для логирования или кастомизации ответа.

Пример

Рассмотрим базовый пример попытки разрешения URL, который вызывает исключение:

pythonfrom django.urls import resolve

try:
  match = resolve('/nonexistent-url/')
except Resolver404 as e:
  print(f"Resolver404: {e}")

Результат выполнения кода:

python"Resolver404: /nonexistent-url/"

Пример

Рассмотрим обработку исключения в собственном промежуточном слое для логирования:

pythonfrom 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:

python"Log: URL not found - /invalid/page/"
"Custom 404 Page"

Пример

Использование исключения для проверки существования маршрута в тестовой среде:

pythonfrom 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:

python"."

Смотрите также

  • исключение Http404,
    которое является базовым для ошибки 404
  • исключение NoReverseMatch,
    которое возникает при ошибке обратного разрешения URL
  • исключение ViewDoesNotExist,
    которое возникает при отсутствии представления
  • исключение ImproperlyConfigured,
    которое возникает при некорректной конфигурации приложения