Ответ 1
Как мы обсуждали, ваша установка верна, но в settings.py вы должны сделать DEBUG=False
. Это скорее производственная функция и не будет работать в среде разработки (если у вас нет DEBUG=False
в dev-машине, конечно).
Согласно документации это должно быть довольно просто: мне просто нужно определить handler404
. В настоящее время я занимаюсь в своем верхнем urls.py
:
urlpatterns = [
...
]
handler404 = 'myapp.views.handle_page_not_found'
Приложение установлено. Соответствующее представление просто (на данный момент я просто хочу перенаправить на главную страницу в случае 404):
def handle_page_not_found(request):
return redirect('homepage')
Но это не влияет: отображается стандартная (отладочная) 404
страница.
Документация немного неоднозначна:
handler404
? Документация говорит в URLconf
но где именно? У меня есть несколько приложений, каждый с другим urls.py
Могу ли я поместить его в любой из них? В верхнем URLconf
? Зачем? Где это документировано?django.http.Http404
, django.http.HttpResponseNotFound
, django.http.HttpResponse
(со status=404
)? Как мы обсуждали, ваша установка верна, но в settings.py вы должны сделать DEBUG=False
. Это скорее производственная функция и не будет работать в среде разработки (если у вас нет DEBUG=False
в dev-машине, конечно).
Отладка должна быть ложной и добавлена для просмотра *args
и **kwargs
. Добавить к urls.py handler404 = 'view_404'
def view_404(request, *args, **kwargs):
return redirect('https://your-site/404')
Если я не добавлю сервер args и kwargs, получите 500.
Чтобы отобразить 404 сообщений об ошибках на пользовательской странице, выполните следующие действия:
В каталоге вашего проекта откройте settings.py
и измените DEBUG
следующим образом:
DEBUG = False
В том же каталоге создайте файл и назовите его views.py
, вставьте следующий код:
from django.shortcuts import render
def handler404(request, exception):
return render(request, 'shop/shop.html')
Наконец, откройте файл urls.py
, который находится в том же каталоге проекта, и добавьте следующий код:
from django.contrib import admin
from . import views
handler404 = views.handler404
urlpatterns = [
path('admin/', admin.site.urls),
]