Не удается просмотреть страницу администрирования django 2.0 после обновления

Я только что портировал на Python3 с 2-х и обновлял Django с 1.7 до 2.0 (я знаю об огромных изменениях). Я использую Heroku для размещения приложения.

Когда я запускаю heroku local или просто запускаю приложение локально с помощью manage.py runserver, приложение загружается, но при переходе на страницу /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 ]

У кого-нибудь есть какие-то идеи о том, что они попробуют сделать дальше?

1 ответ

Решение

Вы не переключились с промежуточного программного обеспечения старого стиля MIDDLEWARE_CLASSES к промежуточному программному обеспечению нового стиля MIDDLEWARE, Вы получаете 404, потому что ваш проект по умолчанию MIDDLEWARE = [], так что редирект для добавления косой черты (например, /admin -> `/admin/) не происходит).

Обратите внимание, что Django с 1,7 до 2,0 - это большой прыжок. Возможно, вам будет проще сначала пройти через 1.8 и 1.11 (что является LTS и все еще поддерживается). В этом случае Django 1.11 поддерживает MIDDLEWARE_CLASSES а также MIDDLEWAREтак что вы можете заставить ваше приложение работать на Django 1.11 с MIDDLEWARE_CLASSES, переключиться на MIDDLEWARE исправить предупреждение об устаревании, и тогда вы в лучшем положении, чтобы перейти на Django 2.0.

Обратите внимание, что вы все еще можете использовать url() в Django 2.0, поэтому вам не нужно переписывать ваши шаблоны URL для использования path() пока у вас не заработает остальная часть проекта.

Другие вопросы по тегам