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'),
]
5 ответов
django.conf.urls.url()
устарел в Django 3.0 и удален в Django 4.0+.
Самый простой способ это заменить
url()
сre_path()
. использует регулярные выражения, такие как , поэтому вам нужно только обновить импорт и заменить
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 полезной для обновления вашего
urls.py
файлы.
Я думаю, что быстрое решение этой проблемы состоит в следующем:
Вы можете легко заменить
from django.conf.urls import url
к этому:
from django.urls import re_path as url
И оставьте остальную часть кода такой же, как и раньше.(Спасибо @Alasdair)
Смотрите в django версии 4.0 это работать не будет. Поэтому при установке Django в вашей виртуальной среде выберите эту версию.
пип установить джанго == 3.2.10
Это определенно решит вашу ошибку, и в основном urls.py сделайте следующее:
URL импорта из django.conf.urls
из пути импорта django.urls, включить
Я увидел эту тему и подумал, что это должна быть просто обертка. Поэтому я попросил об этом друга-исследователя GPT-4-бота Арию в Telegram, и мой верный слуга сделал мне обертку. Просто поместите его вверху вашегоurls.py
и все снова начинает работать.
def url(regex, view, kwargs=None, name=None):
return re_path(regex, view, kwargs, name)
Решения, приведенные выше, кажутся правдоподобными, но сложными. Если вам нужно простое решение, это то, что вам нужно. Это работает и восстановил мой блог.
Если вы используете django-rest-auth или любой другой пакет, вызывающий эту ошибку, вам следует понизить версию django.
pip install Django==3.2.19