升级到 Django 1.11 后 append_slash 不再有效
After upgrade to Django 1.11 append_slash no longer works
在 Django 1.9(和 Python 3.4)中,默认的 APPEND_SLASH 工作正常,即我可以输入 'localhost:8000/ideatree/videos'
并且将添加尾部斜杠。
升级到 Django 1.11(和 Python 3.6)后,APPEND_SLASH 不再工作。
我一直在寻找弃用通知,但到目前为止没有发现似乎适用的内容。 (附带问题:如何像以前的版本一样重新打开 'loud deprecation warnings'?)
这是我的主要内容 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 中,但 'patterns' 现在已弃用并引发警告。
和以前一样,我没有在 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 级别的文件什么都不显示,一个空文件(警告:我的日志设置未经测试)。
一定是我忽略了什么。
Django 在 Django 1.10 中引入了新的中间件。如果您使用 new-style middleware, and MIDDLEWARE_CLASSES
if you are using old-style middleware.
,则应使用 MIDDLEWARE
设置
如果您使用的是 Django 1.10 或 1.11,则仍支持旧的 MIDDLEWARE_CLASSES
设置,因此 Django 应继续使用附加的斜杠进行重定向。
但是,一旦升级到 Django 2.0,MIDDLEWARE_CLASSES
设置将被忽略,您必须切换到 MIDDLEWARE
。
当你切换到 MIDDLEWARE
时,你应该删除 SessionAuthenticationMiddleware
因为它在 1.10 和 1.11 中没有效果,并且在 Django 2.0 中被完全删除。
在 Django 1.9(和 Python 3.4)中,默认的 APPEND_SLASH 工作正常,即我可以输入 'localhost:8000/ideatree/videos' 并且将添加尾部斜杠。
升级到 Django 1.11(和 Python 3.6)后,APPEND_SLASH 不再工作。
我一直在寻找弃用通知,但到目前为止没有发现似乎适用的内容。 (附带问题:如何像以前的版本一样重新打开 'loud deprecation warnings'?)
这是我的主要内容 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 中,但 'patterns' 现在已弃用并引发警告。
和以前一样,我没有在 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 级别的文件什么都不显示,一个空文件(警告:我的日志设置未经测试)。
一定是我忽略了什么。
Django 在 Django 1.10 中引入了新的中间件。如果您使用 new-style middleware, and MIDDLEWARE_CLASSES
if you are using old-style middleware.
MIDDLEWARE
设置
如果您使用的是 Django 1.10 或 1.11,则仍支持旧的 MIDDLEWARE_CLASSES
设置,因此 Django 应继续使用附加的斜杠进行重定向。
但是,一旦升级到 Django 2.0,MIDDLEWARE_CLASSES
设置将被忽略,您必须切换到 MIDDLEWARE
。
当你切换到 MIDDLEWARE
时,你应该删除 SessionAuthenticationMiddleware
因为它在 1.10 和 1.11 中没有效果,并且在 Django 2.0 中被完全删除。