ImportError: невозможно импортировать имя 'url' из 'django.conf.urls' после обновления до Django 4.0

После обновления до Django 4.0 я получаю следующую ошибку при выполнении python manage.py runserver

  ...
  File "/path/to/myproject/myproject/urls.py", line 16, in <module>
    from django.conf.urls import url
ImportError: cannot import name 'url' from 'django.conf.urls' (/path/to/my/venv/lib/python3.9/site-packages/django/conf/urls/__init__.py)

Мой urls.py выглядит следующим образом:

from django.conf.urls

from myapp.views import home

urlpatterns = [
    url(r'^$', home, name="home"),
    url(r'^myapp/', include('myapp.urls'),
]

django.conf.urls.url() был устаревшим в Django 3.0, и удален в Django 4.0+.

Самое простое исправление - заменить url() на re_path(). re_path использует регексы, как url, поэтому вам нужно только обновить импорт и заменить url на re_path.

from django.urls import include, re_path

from myapp.views import home

urlpatterns = [
    re_path(r'^$', home, name='home'),
    re_path(r'^myapp/', include('myapp.urls'),
]

В качестве альтернативы вы можете перейти на использование path. path() не использует регексы, поэтому вам придется обновить шаблоны URL при переходе на path.

from django.urls import include, path

from myapp.views import home

urlpatterns = [
    path('', home, name='home'),
    path('myapp', include('myapp.urls'),
]

Если у вас большой проект с большим количеством шаблонов URL для обновления, вы можете найти библиотеку django-upgrade полезной для обновления ваших url.py файлов.

Вернуться на верх