【问题标题】:Django: Is APPEND_SLASH set to True even if not in settings.py?Django:即使不在settings.py中,APPEND_SLASH是否设置为True?
【发布时间】:2018-01-28 18:23:02
【问题描述】:

这是我的urls.py

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

如果我在浏览器 (Firefox) 中输入 127.0.0.1:8000/polls,我会被重定向到 127.0.0.1:8000/polls/(末尾带有斜线)。

说实话,我很困惑为什么会这样。因为在我的settings.py里面没有

APPEND_SLASH = True

但是,Django 文档说:

APPEND_SLASH

默认:真

当设置为 True 时,如果请求 URL 不匹配任何 URLconf 中的模式,它不以斜杠结尾,一个 HTTP 将重定向发送到附加了斜杠的相同 URL。注意 重定向可能会导致在 POST 请求中提交的任何数据 丢了。

来源:https://docs.djangoproject.com/en/1.11/ref/settings/#append-slash

即使不在settings.py 中,APPEND_SLASH 是否默认为 True?如果你想将它设置为 False,你应该只把它放在这个文件中吗? 或者这种行为的原因是什么?

【问题讨论】:

    标签: python django web


    【解决方案1】:

    是的,默认是True,所以如果您不在设置文件中提供它,它将是True

    您的设置文件中未定义的任何设置都将使用django.conf.global_settings 中提供的默认值。

    【讨论】:

      【解决方案2】:

      在已安装应用程序的 settings.py 中,您可能会注意到您有 CommonMiddleware

      此中间件负责将“/”添加到 URL 的末尾。

      来自文档的片段:

      类 CommonMiddleware[来源]

      为完美主义者增加了一些便利:

      在 DISALLOWED_USER_AGENTS 设置中禁止访问用户代理,该设置应该是已编译正则表达式对象的列表。

      根据 APPEND_SLASH 和 PREPEND_WWW 设置执行 URL 重写。

      如果 APPEND_SLASH 为 True,并且初始 URL 不以斜杠结尾,并且在 URLconf 中找不到,则通过在末尾附加斜杠来形成新 URL。如果在 URLconf 中找到这个新 URL,那么 Django 会将请求重定向到这个新 URL。否则,将照常处理初始 URL。

      例如,如果您没有适用于 foo.com/bar 的有效 URL 模式但有适用于 foo.com/bar/ 的有效模式,则 foo.com/bar 将被重定向到 foo.com/bar/ .

      您可以在此处阅读更多内容: https://docs.djangoproject.com/en/1.11/ref/middleware/

      【讨论】:

        猜你喜欢
        • 2022-11-29
        • 2018-10-26
        • 1970-01-01
        • 2020-07-16
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多