ImportError: 无法导入reverse_lazy名称

5

我是一个Python的新手,尝试在我的系统上运行一段Django代码,但是遇到了这个问题。

$ python manage.py runserver
Running in development mode.
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    import settings
  File "/Users/Kinnovate/Desktop/fsdjango/platformsite/settings.py", line 321, in <module>
    from django.core.urlresolvers import reverse_lazy
ImportError: cannot import name reverse_lazy

我正在使用Python 2.7,该如何解决这个问题?
3个回答

9

reverse_lazy 比 Django 的任何一个发布版本都要新。你确定你有 Django 的主干版本吗?


我需要获取另一个版本的Django吗? - henghonglee
我不知道。你用的是哪个版本?你也可以继续使用你所拥有版本中可用的方法。 - Ned Batchelder
我正在使用 (1, 3, 1, 'final', 0)。 - henghonglee
2
好的,你现在使用的是1.3.1版本。reverse_lazy函数将会在1.4版本中发布,但目前还未发布。请使用reverse函数代替。 - Ned Batchelder
经过9年,我认为应该更新被接受的答案。无论如何,Django的最新版本为2021年9月的3.2.7版。 - Barış Akkurt

7
如果您暂时使用1.3版本,可以使用以下类似的方法:
```代码片段```
try:
    from django.core.urlresolvers import reverse_lazy
except ImportError:
    from django.core.urlresolvers import reverse
    from django.utils.functional import lazy
    reverse_lazy = lambda *args, **kwargs: lazy(reverse, str)(*args, **kwargs)

更新: reverse_lazy 处理可变参数


1
这是一个很好的 polyfill/fallback,适用于 1.3 版本。我需要它来从基于类的视图中定义 success_url。 - Claudiu Hojda
这个能用于自定义模板标签吗?我在一个Django 1.3应用中遇到了同样的问题,我需要反转带有login_required装饰器的URL。 - acrespo

4

在新版本中,您可以使用“import with”来导入:

from django.urls import reverse_lazy

并使用:

reverse_lazy("accounts:list")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接