使用 Django 找不到页面消息

发布于 2024-10-29 07:24:09 字数 83 浏览 3 评论 0原文

如果用户为站点输入随机网址(http://testurl/cdsdfsd),如何发出找不到页面。我有任何更改 settings.py 或如何处理这个..

If a user type a random url(http://testurl/cdsdfsd) for a site ,how to issue page not found.I there any changes settings.py or how to handle this..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

铜锣湾横着走 2024-11-05 07:24:09

django 教程docs 有您应该阅读的部分。

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

在你的 urlconf 中:

handler404 = 'mysite.views.my_custom_404_view'

The django tutorial and docs have sections you should read.

You need to override the default 404 view.

in your urlconf:

handler404 = 'mysite.views.my_custom_404_view'
淡忘如思 2024-11-05 07:24:09

默认情况下,django 正在渲染 404.html 模板。在找到模板的任何位置创建此文件。例如,您可以在 django 项目根目录中创建 templates 目录,然后将其添加到 settings.py 中的 TEMPLATE_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

By default, django is rendering a 404.html template. Crete this file anywhere where your templates are found. E.g. you can create templates directory in your django project root, then add it to the TEMPLATE_DIRS in settings.py:

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

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates/'),
)

another solution is to write your own middleware which will check if there was 404 response, and the to decide what to display. This is especially useful if you want to have a fallback solution (like static pages) or to play with the response and e.g. perform a search on the site and show possible options.

here is an example middleware from django.contrib.flatpages. it check if url is defined in the database, if so - returns this page if not, pass and return default response.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文