Ошибка Django 500 для несуществующего URL в Debug=False
Я использую Django 2.1.3 в Python 3.6.7. Предположим, что у меня есть этот путь URL:
path('admin/', admin.site.urls)
Если я перейду к /ad
в то время как DEBUG = True
Я вижу нормальную страницу ошибки Django 404:
Но если я сделаю DEBUG = False
тогда сервер показывает мне 500.htm вместо 404.html для неверного URL /ad
(это не соответствует ни одному из шаблонов URL).
404.html обнаруживается для действительного URL, который вызывает ошибку 404. (например, когда запрос несуществующего объекта происходит с get_object_or_404
функция)
вот мой /templates
структура каталогов:
/templates
400.html
403.html
404.html
500.html
index.html
...
Итак, как я должен сказать Django, чтобы он показывал ошибку 404 в производственной (в дополнение к разработке), если URL запроса не соответствует ни одному из шаблонов URL?
Замечания:
- Согласно документации, если у меня есть
404.html
в корневом каталоге шаблонов этот файл 404.html будет использоваться с обработчиком ошибок по умолчанию.
Обновить:
Я понял, что это случилось, потому что defaults.page_not_found
поднимает Resolver404
и это вызвано:
путь, переданный для разрешения (), не соответствует виду
что именно и произошло,(/ad
не соответствует ни одному виду)
вот мой urls.py:
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
2 ответа
Я понял, что один из моих пользовательских процессоров контекстного шаблона использует django.urls.resolve
и так как путь не соответствует ни одному виду, resolve
поднимает Resolver404.
Так что я исправляю этот контекстный процессор и проблема решена!
Вам нужно создать 404 представление, которое будет отображаться при отсутствии совпадения URL. Тогда вам нужно установить его hander404
в urls.py
handler404 = 'mysite.views.my_custom_page_not_found_view'
Для получения дополнительной информации: https://docs.djangoproject.com/en/dev/topics/http/views/