使用Django找不到页面的消息

时间:2011-04-04 18:26:11

标签: django django-templates django-views django-urls

如果用户为网站键入随机网址(http:// testurl / cdsdfsd),如何发布未找到的网页。我有任何更改settings.py或如何处理此内容。

2 个答案:

答案 0 :(得分:2)

django tutorialdocs包含您应阅读的部分。

您需要覆盖默认的404视图。

你的urlconf中的

handler404 = 'mysite.views.my_custom_404_view'

答案 1 :(得分:0)

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

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