Skip to content

Commit f3d5a93

Browse files
committed
fix: Unescape JSONView for django admin's autocomplete widget
1 parent 83e99f0 commit f3d5a93

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

djangocms_frontend/contrib/link/helpers.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from django.contrib.contenttypes.models import ContentType
88
from django.core.exceptions import FieldError, ObjectDoesNotExist
99
from django.utils.encoding import force_str
10-
from django.utils.html import mark_safe
1110

1211
from djangocms_frontend.settings import EMPTY_CHOICE
1312

@@ -62,6 +61,15 @@ def get_object_for_value(value):
6261
return None
6362

6463

64+
def unescape(text, nbsp):
65+
return (text.replace(" ", nbsp)
66+
.replace("&", "&")
67+
.replace("&lt;", "<")
68+
.replace("&gt;", ">")
69+
.replace("&quot;", '"')
70+
.replace("&#x27;", "'"))
71+
72+
6573
def get_link_choices(request, term="", lang=None, nbsp=None):
6674
global _querysets
6775

@@ -78,7 +86,9 @@ def get_link_choices(request, term="", lang=None, nbsp=None):
7886
"children": [
7987
dict(
8088
id=f"{type_id}-{page}",
81-
text=mark_safe(name.replace("&nbsp;", nbsp)),
89+
# django admin's autocomplete view requires unescaped strings
90+
# get_page_choices escepes strings, so we undo the escape
91+
text=unescape(name, nbsp),
8292
)
8393
for page, name in descr
8494
if not isinstance(term, str) or term.upper() in name.upper()

0 commit comments

Comments
 (0)