升级到Django 1.11后,append_slash不再有效

时间:2017-09-29 22:12:49

标签: python django django-urls django-settings

在Django 1.9(和Python 3.4)中,APPEND_SLASH的默认设置正常,即我可以输入'localhost:8000 / ideatree / videos' 并且将添加尾部斜杠。

升级到Django 1.11(和Python 3.6)后,APPEND_SLASH不再有效。

我一直在寻找弃用通知,但到目前为止没有发现任何似乎适用的内容。 (附带问题:你如何重新启用'大声弃用警告',就像以前的版本一样?)

这是我的主要urls.py:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [   url(r'^(?i)ideatree/', include('ideatree.urls'),
 name='home'),
]

和包含的app_space中的urls.py:

from django.conf.urls import url
from . import views

app_name = 'ideatree'
urlpatterns = [
   url(r'^$', views.index,name='index'),
   url(r'^(?i)features/$', views.features, name='features'),
   url(r'^(?i)videos/$', views.videos, name='videos')
]

这两个url.py文件都没有变化,只有在Django 1.9中我有

from django.conf.urls import patterns, include, url
主urls.py中,但“模式”现已弃用,并发出警告。

和以前一样,我没有在settings.py中设置APPEND_SLASH,依赖于它的默认值True,虽然我尝试将其显式设置为True,结果相同。

这是我的中间件:

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

这是错误:

Page not found (404)
Request Method: GET
Request URL:    http://localhost:8000/ideatree/videos

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:
^(?i)ideatree/ ^$ [name='index']
^(?i)ideatree/ ^(?i)features/$ [name='features']
^(?i)ideatree/ videos/$ [name='videos']

我还尝试清除浏览器缓存,并使用其他浏览器,以防缓存仍未清除。

以DEBUG或级别INFO记录到文件什么都不显示,一个空文件(警告:我的日志记录设置未经测试)。

我必须要忽略一些东西。

1 个答案:

答案 0 :(得分:3)

Django在Django 1.10中引入了新的中间件。如果您使用new-style middleware,则应使用MIDDLEWARE设置;如果使用old-style middleware,则应使用MIDDLEWARE_CLASSES

如果您使用的是Django 1.10或1.11,则仍然支持旧的MIDDLEWARE_CLASSES设置,因此Django应该继续使用附加的斜杠重定向。

但是,一旦升级到Django 2.0,MIDDLEWARE_CLASSES设置将被忽略,您必须切换到MIDDLEWARE

切换到MIDDLEWARE时,应删除SessionAuthenticationMiddleware,因为它在1.10和1.11中无效,并在Django 2.0中完全删除。