Django:APPEND_SLASH即使不在settings.py?

时间:2017-08-20 16:08:06

标签: python django web

这是我的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

     

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

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

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

2 个答案:

答案 0 :(得分:5)

是的,默认值为True,因此如果您未在设置文件中提供,则为True

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

答案 1 :(得分:0)

在已安装的应用中的settings.py中,您可能会注意到 <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="file:/your/absoulute/path/commonConfig" /> <property name="cacheSeconds" value="120" /> </bean>

此中间件负责在网址末尾添加“/”。

文档中的代码段:

  

类CommonMiddleware [源]

     

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

     

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

     

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

     

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

     

例如,如果您没有foo.com/bar的有效网址格式但foo.com/bar/的格式有效,则foo.com/bar将被重定向到foo.com/bar/

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