Ошибка 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/

Другие вопросы по тегам