8

首先,我是 Django 新手,所以请对我好点:D

我目前正在为 Django 3 调整 .py 文件,因为我拥有的文件与 Django 2 兼容。因此,对新版本进行了一些更改,并在一个文件中写道:

@wraps(view_func, assigned=available_attrs(view_func))

随着进口:

from django.utils.decorators import available_attrs

我搜索了一个available_attrs的改编版,很快发现已经为新版本去掉了。

当我启动代码时,我有这个:

ImportError : cannot import name 'available_attrs' from 'django.utils.decorators'

所以我想知道我应该写什么而不是 available_attrs 来使它工作?

PS:对不起我的英语不好

4

1 回答 1

13

available_attrs()只是为了帮助在 Python 2 和 Python 3 之间架起一座桥梁。这在Django 3.0 发行说明中有记录:

删除了私有 Python 2 兼容性 API

虽然在 Django 2.0 中删除了对 Python 2 的支持,但并未从 Django 中删除一些私有 API,因此第三方应用程序可以继续使用它们,直到 Python 2 生命周期结束。

由于我们希望应用程序在添加对 Django 3.0 的支持时会放弃 Python 2 兼容性,因此我们此时将删除这些 API。

  • [...]
  • django.utils.decorators.available_attrs()- 这个函数返回functools.WRAPPER_ASSIGNMENTS

如果@wraps()您的示例行中的 是标准functools.wraps()装饰器,那么您可以完全删除assigned=available_attrs(...),因为functools.WRAPPER_ASSIGNMENTS它的默认值是assigned

@wraps(view_func)

否则,直接使用functools.WRAPPER_ASSIGNMENTS即可。

于 2020-08-12T13:10:27.117 回答