升级后无法查看 django 2.0 管理页面
Can't view django 2.0 admin page after upgrading
我刚刚从 2 移植到 Python3 并将 Django 从 1.7 升级到 2.0(我知道巨大的变化)。我正在使用 Heroku 来托管该应用程序。
当我 运行 heroku local 或只是 运行 本地应用程序与 manage.py 运行server 应用程序加载但导航到 /admin 页面出现错误:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:5000/admin
Using the URLconf defined in loowatt.urls, Django tried these URL patterns, in this order:
write/
admin/
^$ [name='index']
The current path, admin, didn't match any of these.
我的新 app.urls.py 看起来像这样:
1 from django.contrib import admin
2 from django.urls import include, path
3
4 from . import views
5
6 urlpatterns = [
7 path('write/', views.write),
8 path('admin/', admin.site.urls),
9 path('', include('units.urls')),
10 ]
而且我的设置具有管理设置的所有正确的中间件和上下文处理器:
21 INSTALLED_APPS = [
22 'django.contrib.admin',
23 'django.contrib.auth',
24 'django.contrib.contenttypes',
25 'django.contrib.sessions',
26 'django.contrib.messages',
27 'units.apps.UnitsConfig',
28 # Disable Django's own staticfiles handling in favour of WhiteNoise, for
29 # greater consistency between gunicorn and `./manage.py runserver`. See:
30 # http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
31 # 'whitenoise.runserver_nostatic',
32 'django.contrib.staticfiles',
33 'import_export',
34 'rangefilter',
35 ]
37 MIDDLEWARE_CLASSES = [
38 'django.middleware.security.SecurityMiddleware',
39 'whitenoise.middleware.WhiteNoiseMiddleware',
40 'django.contrib.sessions.middleware.SessionMiddleware',
41 'django.middleware.common.CommonMiddleware',
42 'django.middleware.csrf.CsrfViewMiddleware',
43 'django.contrib.auth.middleware.AuthenticationMiddleware',
44 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
45 'django.contrib.messages.middleware.MessageMiddleware',
46 'django.middleware.clickjacking.XFrameOptionsMiddleware',
47 ]
53 TEMPLATES = [
54 {
55 'BACKEND': 'django.template.backends.django.DjangoTemplates',
56 'DIRS': [],
57 'APP_DIRS': True,
58 'OPTIONS': {
59 'context_processors': [
60 'django.template.context_processors.debug',
61 'django.template.context_processors.request',
62 'django.contrib.auth.context_processors.auth',
63 'django.contrib.messages.context_processors.messages',
64 ],
65 'debug': DEBUG,
66 },
67 },
68 ]
任何人都知道他们接下来会尝试什么来让它工作吗?
您还没有从旧式中间件 MIDDLEWARE_CLASSES
切换到新式中间件 MIDDLEWARE
。您得到 404 是因为您的项目默认为 MIDDLEWARE = []
,因此附加斜杠的重定向(例如 /admin
-> `/admin/)不会发生)。
请注意,Django 1.7 到 2.0 是一个 大 跳跃。您可能会发现首先通过 1.8 和 1.11(这是 LTS 并且仍然受支持)更容易。在这种情况下,Django 1.11 支持 MIDDLEWARE_CLASSES
和 MIDDLEWARE
,因此您可以使用 MIDDLEWARE_CLASSES
让您的应用在 Django 1.11 上运行,切换到 MIDDLEWARE
以修复弃用警告,并且那么您就可以更好地升级到 Django 2.0。
请注意,您仍然可以在 Django 2.0 中使用 url()
,因此您不必重写 URL 模式来使用 path()
,直到您获得其余的项目正在运行。
我刚刚从 2 移植到 Python3 并将 Django 从 1.7 升级到 2.0(我知道巨大的变化)。我正在使用 Heroku 来托管该应用程序。
当我 运行 heroku local 或只是 运行 本地应用程序与 manage.py 运行server 应用程序加载但导航到 /admin 页面出现错误:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:5000/admin
Using the URLconf defined in loowatt.urls, Django tried these URL patterns, in this order:
write/
admin/
^$ [name='index']
The current path, admin, didn't match any of these.
我的新 app.urls.py 看起来像这样:
1 from django.contrib import admin
2 from django.urls import include, path
3
4 from . import views
5
6 urlpatterns = [
7 path('write/', views.write),
8 path('admin/', admin.site.urls),
9 path('', include('units.urls')),
10 ]
而且我的设置具有管理设置的所有正确的中间件和上下文处理器:
21 INSTALLED_APPS = [
22 'django.contrib.admin',
23 'django.contrib.auth',
24 'django.contrib.contenttypes',
25 'django.contrib.sessions',
26 'django.contrib.messages',
27 'units.apps.UnitsConfig',
28 # Disable Django's own staticfiles handling in favour of WhiteNoise, for
29 # greater consistency between gunicorn and `./manage.py runserver`. See:
30 # http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
31 # 'whitenoise.runserver_nostatic',
32 'django.contrib.staticfiles',
33 'import_export',
34 'rangefilter',
35 ]
37 MIDDLEWARE_CLASSES = [
38 'django.middleware.security.SecurityMiddleware',
39 'whitenoise.middleware.WhiteNoiseMiddleware',
40 'django.contrib.sessions.middleware.SessionMiddleware',
41 'django.middleware.common.CommonMiddleware',
42 'django.middleware.csrf.CsrfViewMiddleware',
43 'django.contrib.auth.middleware.AuthenticationMiddleware',
44 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
45 'django.contrib.messages.middleware.MessageMiddleware',
46 'django.middleware.clickjacking.XFrameOptionsMiddleware',
47 ]
53 TEMPLATES = [
54 {
55 'BACKEND': 'django.template.backends.django.DjangoTemplates',
56 'DIRS': [],
57 'APP_DIRS': True,
58 'OPTIONS': {
59 'context_processors': [
60 'django.template.context_processors.debug',
61 'django.template.context_processors.request',
62 'django.contrib.auth.context_processors.auth',
63 'django.contrib.messages.context_processors.messages',
64 ],
65 'debug': DEBUG,
66 },
67 },
68 ]
任何人都知道他们接下来会尝试什么来让它工作吗?
您还没有从旧式中间件 MIDDLEWARE_CLASSES
切换到新式中间件 MIDDLEWARE
。您得到 404 是因为您的项目默认为 MIDDLEWARE = []
,因此附加斜杠的重定向(例如 /admin
-> `/admin/)不会发生)。
请注意,Django 1.7 到 2.0 是一个 大 跳跃。您可能会发现首先通过 1.8 和 1.11(这是 LTS 并且仍然受支持)更容易。在这种情况下,Django 1.11 支持 MIDDLEWARE_CLASSES
和 MIDDLEWARE
,因此您可以使用 MIDDLEWARE_CLASSES
让您的应用在 Django 1.11 上运行,切换到 MIDDLEWARE
以修复弃用警告,并且那么您就可以更好地升级到 Django 2.0。
请注意,您仍然可以在 Django 2.0 中使用 url()
,因此您不必重写 URL 模式来使用 path()
,直到您获得其余的项目正在运行。