django 中自定义 404 和 500 页面 -> DEBUG = True

问题描述 投票:0回答:3

我想向客户展示我的网站示例,它还没有完全完成,但对我来说,隐藏错误并且不显示我的代码库非常重要,如果在开发模式下发生服务器错误,django 会执行哪些操作。就像这样 - Django 描述出了什么问题

此外,我无法将 DEBUG = False 设置为 false,因为在这种情况下,媒体文件不会显示,因为它们当前正在本地提供。如果 DEBUG = False,则不会提供服务。

那么有没有一种方法可以在 DEBUG = False 的情况下在本地提供媒体文件,或者在 DEBUG = True 的情况下显示自定义 404 和 500 页面。

django python-3.x sqlite django-rest-framework django-views
3个回答
6
投票

只需将其添加到您的网址中即可:

import django

def custom_page_not_found(request):
    return django.views.defaults.page_not_found(request, None)

def custom_server_error(request):
    return django.views.defaults.server_error(request)

urlpatterns = [
    # .....
    path("404/", custom_page_not_found),
    path("500/", custom_server_error),
    #.....
]

更新:

我没有提到,但您需要在模板目录中拥有自定义的

404.html
500.html
模板。


1
投票

我建议您替换标准的 Django 404 页面暂时

在您的虚拟环境中,可以在

(yourenvironmentname)/lib/python3.8/site-packages/django/views/templates
找到 Django 404 模板的路径,名称为 Technical_404.html 和 Technical_500.html。

将以下文件替换为您的自定义 404 和 500 页面。


0
投票

另一种方法是使用django中间件,这里是一个例子:

# put this at the end of settings file

from django.http import HttpResponseNotFound

class Custom404ErrorMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        response = self.get_response(request)
        if response.status_code == 404:
            response = HttpResponseNotFound('Page not found...')
        return response

MIDDLEWARE.append("my_project.settings.Custom404ErrorMiddleware")
© www.soinside.com 2019 - 2024. All rights reserved.