导入错误:升级到 Django 4.0 后无法从“django.conf.urls”导入名称“url”

问题描述 投票:0回答:4

升级到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'),
]
python django django-urls django-4.0
4个回答
248
投票

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 模式。

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


62
投票

我认为解决这个问题的快速方法是执行以下操作;

您可以轻松更换

from django.conf.urls import url

对此:

from django.urls import re_path as url

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


2
投票

在django版本4.0中查看它不会工作。 因此,在虚拟环境中安装 Django 时,请选择此版本

pip 安装 django==3.2.10

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

从 django.conf.urls 导入 url

from django.urls 导入路径,include


0
投票

我看到了这个帖子,认为这应该只是一个包装。所以我通过 Telegram 向一位研究员朋友 GPT-4 机器人 Aria 询问了这个,我忠实的仆人给我做了一个包装。只需将其放在您的

urls.py
的顶部,事情就会再次开始工作。

def url(regex, view, kwargs=None, name=None):
    return re_path(regex, view, kwargs, name)

上述解决方案看似合理,但很复杂。如果您想要一个简单的修复方法,那就是这个。它有效并恢复了我的博客。

© www.soinside.com 2019 - 2024. All rights reserved.