ImportError:升级到Django 4.0后,无法从'django.conf.urls'导入名称'url'

63lcw9qa  于 2023-07-01  发布在  Go
关注(0)|答案(4)|浏览(206)

升级到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'),
]
ykejflvf

ykejflvf1#

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'),
]

或者,您可以切换到使用pathpath()不使用正则表达式,因此如果切换到path,则必须更新URL模式。

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文件很有用。

k97glaaz

k97glaaz2#

我认为解决这个问题的一个快速方法是:
您可以轻松更换

from django.conf.urls import url

对此:

from django.urls import re_path as url

并保持代码的其余部分与以前相同。(感谢@Alasdair)

zlwx9yxi

zlwx9yxi3#

在django版本4.0中,它将无法工作。所以当你在虚拟环境中安装Django的时候,选择这个版本

pip install django==3.2.10

这肯定会解决您的错误,并在main urls.py中执行以下操作:

from django.conf.urls import url
从django.urls导入路径,包含

oalqel3c

oalqel3c4#

我观察到一些奇怪的事情,这个错误在我的虚拟环境中工作时消失了,但它在它之外是持久的。知道为什么吗但是导入URL作为re_path对我来说很好:)。正在使用Django 4.2.2和DRF 3.14.0。

相关问题