使用Django未找到页面消息

使用Django未找到页面消息,django,django-templates,django-views,django-urls,Django,Django Templates,Django Views,Django Urls,如果用户键入随机url(http://testurl/cdsdfsd)对于一个站点,如何发布页面未找到。我没有任何更改settings.py或如何处理此问题。django和您应该阅读的部分 您需要覆盖默认的404视图 在您的urlconf中: handler404 = 'mysite.views.my_custom_404_view' 默认情况下,django正在呈现404.html模板。在找到模板的任何位置创建此文件。例如,您可以在django项目根目录中创建templates目录,然后将其

如果用户键入随机url(http://testurl/cdsdfsd)对于一个站点,如何发布页面未找到。我没有任何更改settings.py或如何处理此问题。

django和您应该阅读的部分

您需要覆盖默认的404视图

在您的urlconf中:

handler404 = 'mysite.views.my_custom_404_view'

默认情况下,django正在呈现
404.html
模板。在找到模板的任何位置创建此文件。例如,您可以在django项目根目录中创建
templates
目录,然后将其添加到
settings.py中的
TEMPLATE\u DIRS

import os
BASE_DIR = os.path.abspath(os.path.dirname(__file__))

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates/'),
)
另一个解决方案是编写您自己的中间件,它将检查是否有404响应,并决定显示什么。如果您希望有一个后备解决方案(如静态页面)或处理响应,例如在站点上执行搜索并显示可能的选项,这一点尤其有用

下面是来自
django.contrib.flatpages
的中间件示例。它检查数据库中是否定义了url,如果是,则返回此页面,如果不是,则传递并返回默认响应

class FlatpageFallbackMiddleware(object):
    def process_response(self, request, response):
        if response.status_code != 404:
            return response # No need to check for a flatpage for non-404 responses.
        try:
            return flatpage(request, request.path_info)
            # Return the original response if any errors happened. Because this
            # is a middleware, we can't assume the errors will be caught elsewhere.
        except Http404:
            return response
        except:
            if settings.DEBUG:
                raise
            return response