这是我的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,您应该只将它放在此文件中?
或者这种行为的原因是什么?
答案 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/