ImportError:升级到 Django 4.0 后无法从“django.conf.urls”导入名称“url”
Posted
技术标签:
【中文标题】ImportError:升级到 Django 4.0 后无法从“django.conf.urls”导入名称“url”【英文标题】:ImportError: cannot import name 'url' from 'django.conf.urls' after upgrading to Django 4.0 【发布时间】:2022-01-16 00:53:18 【问题描述】:升级到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'),
]
【问题讨论】:
【参考方案1】: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
文件很有用。
【讨论】:
这非常重要,尤其是因为 Jetbrains 的最新 PyCharm 教程仍然使用 django.conf.urls。尤其是对于新手来说,从教程中复制代码总是令人不安。 谢谢,但我还不知道为什么我在安装 django4 时从初始模板中得到url
@user.dz Django 4.0 template 不使用url
。如果您最终在模板中使用url
,那么您可能安装了较早版本的 Django。运行 which django-admin
或 django-admin --version
可能会帮助您弄清楚发生了什么。使用python -m django
确保您为虚拟环境使用正确的django
,例如python -m django startproject myproject
.
你说得对,我很惊讶在虚拟环境中看到django-admin
1.11 版。我为房子打扫和清理,发现:/usr/local
中的 python 2.7、3.6、3.7、3.8、3.9、3.10 和Library
(macos)中的另一个 python。我的安装在Library
并以某种方式链接到/opt
,它具有优先权。我删除它并使用正确的模板从头开始。【参考方案2】:
查看 django 版本 4.0 它将无法正常工作。 所以在你的虚拟环境中安装 Django 时选择这个版本
pip install django==3.2.10
这肯定会解决你的错误,在 main urls.py 中这样做:
从 django.conf.urls 导入网址
从 django.urls 导入路径,包括
【讨论】:
降级到 Django 3 是一个临时修复。在某些时候用户应该升级到 Django 4 或更高版本,此时您需要替换url()
s以上是关于ImportError:升级到 Django 4.0 后无法从“django.conf.urls”导入名称“url”的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:无法在 django virtualenv 中导入名称 _remove_dead_weakref
Heroku 上的 Django 部署,升级到 Cedar-14,导入设置错误
升级到 Django 1.7。导入错误:没有名为仪表板的模块
Python3.7 ImportError:没有名为“django”的模块