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
Другие вопросы по тегам