【问题标题】:Django- trying to use APPEND_SLASH and a custom catchall 404 viewDjango-尝试使用 APPEND_SLASH 和自定义的包罗万象的 404 视图
【发布时间】:2011-08-12 08:46:57
【问题描述】:

我通常在我的 Django 网站中添加一个包罗万象的 404 正则表达式,作为 urls.py 中的最后一个表达式:

urlpatterns += patterns('django.views.generic.simple',
    (r'^.', 'direct_to_template', {'template': 'unknown.html'}),

我总体上对它的表现感到满意。 unknown.html 模板扩展了我的基本模板并很好地告诉查看者他们输入的 url 不存在,但页面仍然具有我网站的所有导航和样式。

但是,在不得不反复告诉人们输入一个尾部斜线之后,我觉得需要设置settings.py中的APPEND_SLASH = True参数。

文档状态:

如果 APPEND_SLASH 为 True 并且 初始 URL 不以斜杠结尾, 并且在 URLconf 中找不到, 然后通过附加形成一个新的URL 最后一个斜线。如果这个新 URL 是 在 URLconf 中找到,然后是 Django 将请求重定向到这个新的 URL。 否则,初始 URL 为 照常处理。

所以按照这个逻辑,foo.com/bar 被我的“404” url 表达式成功捕获,然后它可以被重定向到我的 foo.com/bar/ url 表达式。 *

什么是维护友好/自定义包罗万象的 404 页面同时还能够使用 APPEND_SLASH 或具有类似功能的东西的最佳方式?*



--编辑/回答--

不知何故我错过了你只需要添加一个名为 404.html 的模板,并确保 DEBUG = False

感谢 DTing!

【问题讨论】:

    标签: django http-status-code-404 django-urls


    【解决方案1】:

    我认为您可以只自定义 404.html 而不是使用“catchall”,因为您只是重定向到自定义模板。您的自定义 404.html 模板没有理由不能扩展您网站的 base.html。

    http://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views

    关于 404 浏览需要注意的三件事:

    • 如果 Django 在之后找不到匹配项,也会调用 404 视图 检查每个正则表达式 URLconf。
    • 如果您没有定义自己的 404 视图,只需使用默认值, 这是推荐的——你还有 一项义务:您必须创建一个 404.html 模板位于模板目录的根目录中。默认 404 视图将使用该模板为所有 404 错误。默认的 404 视图将 将一个变量传递给模板: request_path,它是 URL 导致 404。
    • 404 视图被传递了一个 RequestContext 并且将有权访问 您提供的变量 TEMPLATE_CONTEXT_PROCESSORS 设置 (例如,MEDIA_URL)。
    • 如果 DEBUG 设置为 True(在您的设置模块中),那么您的 404 视图 永远不会被使用,并且回溯 将改为显示。

    如果您确实想使用自定义视图,

    这个 page_not_found 视图应该 足以满足 99% 的 Web 应用程序, 但是如果你想覆盖 404 查看,可以在中指定handler404 你的 URLconf,像这样:

    handler404 = 'mysite.views.my_custom_404_view'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      相关资源
      最近更新 更多