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
файлов.