【问题标题】:How Django adds trailing slashDjango 如何添加斜杠
【发布时间】:2017-07-24 13:45:00
【问题描述】:

使用 Django 驱动的项目,该项目会自动在末尾添加一个斜杠。所以:

foo.com/bar

会变成一个

foo.com/bar/

have read 有一个CommonMiddleware 类,它有一个APPEND_SLASH 属性,可以控制斜杠。我的项目确实导入了CommonMiddleware

MIDDLEWARE_CLASSES = (
    ...
    'django.middleware.common.CommonMiddleware',
)

但是,APPEND_SLASH 从未在任何地方设置。并且项目不断添加斜杠。


问题:如果您导入CommonMiddlewareAPPEND_SLASH 是否会默认设置为True?有什么方法可以控制斜杠吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    我认为您必须在 django 设置模块中设置 APPEND_SLASH

    https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-APPEND_SLASH

    【讨论】:

    • 好吧,默认值为True。但是我已经从项目中完全删除了CommonMiddleware,并且仍然会添加尾部斜杠。
    • @Oleg 清除浏览器缓存。 CommonMiddleware 返回一个永久重定向。
    • 也许你有另一个中间件添加它?您可以尝试删除除CommonMiddleware 之外的所有中间件并将APPEND_SLASH 设置为False 并查看其行为是否符合预期。
    • 例如,如果您拥有的其他中间件之一继承自 CommonMiddleware,则可能是它正在添加 /
    • @knbk 你是对的,清除缓存后 - 重定向消失了。
    【解决方案2】:

    我将编译一个完整的答案。它有两个方面:

    1) 如果您将CommonMiddleware 导入到您的项目中 - 它将使用其APPEND_SLASH 属性(即True by default)。

    2) 跟踪您的 urls 文件(如果它类似于 ^foo.com/bar/$)。

    如果您更改CommonMiddlewareAPPEND_SLASH,请不要忘记清除缓存(因为浏览器很可能会缓存它)。

    【讨论】:

    • 我在settings.py中删除了CommonMiddleware,最后还是得到斜线,即使我写localhost/name我也会得到localhost/name/
    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2015-01-16
    • 2011-01-31
    • 2018-06-29
    • 2012-01-12
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多