Ron*_*Ron 3 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'),
]
Run Code Online (Sandbox Code Playgroud)
以及包含的 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')
]
Run Code Online (Sandbox Code Playgroud)
这两个 url.py 文件都没有改变,除了在 Django 1.9 中我有
from django.conf.urls import patterns, include, url
Run Code Online (Sandbox Code Playgroud)
在主 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',
]
Run Code Online (Sandbox Code Playgroud)
这是错误:
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']
Run Code Online (Sandbox Code Playgroud)
我还尝试清除浏览器缓存,并使用其他浏览器以防缓存仍未清除。
在 DEBUG 级别或 INFO 级别记录到文件什么也不显示,一个空文件(警告:我的日志记录设置未经测试)。
一定有我忽略的东西。
Django 在 Django 1.10 中引入了新的中间件。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 中被完全删除。