Django 3 上的 available_attrs 变成了什么?
What became available_attrs on Django 3?
首先,我是 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 : 抱歉我的英语不好
available_attrs()
的存在只是为了帮助 Python 2 和 Python 3 之间的桥梁。这记录在 Django 3.0 release notes:
Removed private Python 2 compatibility APIs
While Python 2 support was removed in Django 2.0, some private APIs weren’t removed from Django so that third party apps could continue using them until the Python 2 end-of-life.
Since we expect apps to drop Python 2 compatibility when adding support for Django 3.0, we’re removing these APIs at this time.
- [...]
django.utils.decorators.available_attrs()
- This function returns functools.WRAPPER_ASSIGNMENTS
如果你的示例行中的@wraps()
是标准的functools.wraps()
decorator,那么你可以完全删除assigned=available_attrs(...)
,因为functools.WRAPPER_ASSIGNMENTS
是 assigned
的默认值:
@wraps(view_func)
否则,直接使用functools.WRAPPER_ASSIGNMENTS
即可。
首先,我是 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 : 抱歉我的英语不好
available_attrs()
的存在只是为了帮助 Python 2 和 Python 3 之间的桥梁。这记录在 Django 3.0 release notes:
Removed private Python 2 compatibility APIs
While Python 2 support was removed in Django 2.0, some private APIs weren’t removed from Django so that third party apps could continue using them until the Python 2 end-of-life.
Since we expect apps to drop Python 2 compatibility when adding support for Django 3.0, we’re removing these APIs at this time.
- [...]
django.utils.decorators.available_attrs()
- This function returnsfunctools.WRAPPER_ASSIGNMENTS
如果你的示例行中的@wraps()
是标准的functools.wraps()
decorator,那么你可以完全删除assigned=available_attrs(...)
,因为functools.WRAPPER_ASSIGNMENTS
是 assigned
的默认值:
@wraps(view_func)
否则,直接使用functools.WRAPPER_ASSIGNMENTS
即可。