`_
section.
-One of the easiest contributions you can make is helping to translate this addon on
-`Transifex `_.
-
Documentation
=============
diff --git a/djangocms_attributes_field/__init__.py b/djangocms_attributes_field/__init__.py
index afced14..a33997d 100644
--- a/djangocms_attributes_field/__init__.py
+++ b/djangocms_attributes_field/__init__.py
@@ -1 +1 @@
-__version__ = '2.0.0'
+__version__ = '2.1.0'
diff --git a/djangocms_attributes_field/fields.py b/djangocms_attributes_field/fields.py
index 7364977..e0b2437 100644
--- a/djangocms_attributes_field/fields.py
+++ b/djangocms_attributes_field/fields.py
@@ -7,8 +7,7 @@
from django.core.validators import RegexValidator
from django.db import models
from django.utils.html import conditional_escape, mark_safe
-from django.utils.translation import ugettext as _
-from django.utils.translation import ugettext_lazy
+from django.utils.translation import gettext_lazy as _
from .widgets import AttributesWidget
@@ -57,7 +56,7 @@ class AttributesField(models.Field):
* The default widget is AttributesWidget from this package.
"""
default_error_messages = {
- 'invalid': ugettext_lazy("'%s' is not a valid JSON string.")
+ 'invalid': _("'%s' is not a valid JSON string.")
}
description = "JSON object"
diff --git a/djangocms_attributes_field/widgets.py b/djangocms_attributes_field/widgets.py
index 7e27620..2dad209 100644
--- a/djangocms_attributes_field/widgets.py
+++ b/djangocms_attributes_field/widgets.py
@@ -1,7 +1,7 @@
from django.forms import Widget
from django.forms.utils import flatatt
from django.utils.html import escape, mark_safe, strip_spaces_between_tags
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
class AttributesWidget(Widget):
@@ -13,10 +13,11 @@ class AttributesWidget(Widget):
# https://www.huyng.com/posts/django-custom-form-widget-for-dictionary-and-tuple-key-value-pairs
def __init__(self, *args, **kwargs):
"""
- Supports additional kwargs: `key_attr` and `val_attr`.
+ Supports additional kwargs: `key_attr`, `val_attr`, `sorted`.
"""
self.key_attrs = kwargs.pop('key_attrs', {})
self.val_attrs = kwargs.pop('val_attrs', {})
+ self.sorted = sorted if kwargs.pop('sorted', True) else lambda x: x
super().__init__(*args, **kwargs)
def _render_row(self, key, value, field_name, key_attrs, val_attrs):
@@ -69,7 +70,7 @@ def render(self, name, value, attrs=None, renderer=None):
output = ''
if value and isinstance(value, dict) and len(value) > 0:
- for key in sorted(value):
+ for key in self.sorted(value):
output += self._render_row(key, value[key], name, flatatt(self.key_attrs), flatatt(self.val_attrs))
# Add empty template
@@ -94,12 +95,16 @@ def render(self, name, value, attrs=None, renderer=None):
# INSTALLED_APPS. By inlining the JS and CSS here, we avoid this.
output += """