First of all, I'm new to Django, so please be nice with me :D
I'm currently adapting .py files for Django 3 because the files I have are compatible for Django 2. So, some changes have been made for the new version and in a file, it's written :
@wraps(view_func, assigned=available_attrs(view_func))
With the import :
from django.utils.decorators import available_attrs
I searched for an adaptation of available_attrs, and I quickly found that it has been removed for the new version.
And when I launch the code, I have this :
ImportError : cannot import name 'available_attrs' from 'django.utils.decorators'
So I was wondering what should I write instead of available_attrs to make it work ?
PS : Sorry for my bad english
Is django 3 backward compatible with django 2? No Django version is fully backwards compatible with the previous one.
Python compatibilityDjango 4.0 supports Python 3.8, 3.9, and 3.10. We highly recommend and only officially support the latest release of each series.
What Python version should I use with Django? ¶ Since newer versions of Python are often faster, have more features, and are better supported, the latest version of Python 3 is recommended.
Django is a Python-based and open-source web framework that is designed to assist developers to build backend web applications quickly with less code.
available_attrs()
only ever existed to help bridge between Python 2 and Python 3. This is documented in the 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
If the @wraps()
in your sample line is the standard functools.wraps()
decorator, then you can just entirely remove assigned=available_attrs(...)
, because functools.WRAPPER_ASSIGNMENTS
is the default value for assigned
:
@wraps(view_func)
otherwise, just use functools.WRAPPER_ASSIGNMENTS
directly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With