【问题标题】:Page not found message using Django使用 Django 找不到页面消息
【发布时间】:2011-07-29 09:31:07
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    django tutorialdocs 有你应该阅读的部分。

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

    在您的 urlconf 中:

    handler404 = 'mysite.views.my_custom_404_view'
    

    【讨论】:

      【解决方案2】:

      默认情况下,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
      

      【讨论】:

        猜你喜欢
        • 2017-09-22
        • 2017-02-03
        • 1970-01-01
        • 2019-03-03
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 2016-08-01
        相关资源
        最近更新 更多