Как сделать так, чтобы json () фильтр в Jinja2 выводил Unicode вместо escape-последовательностей? - PullRequest
0 голосов
/ 01 мая 2020

Мой шаблон используется для JS

let SETTINGS = {{settings|tojson(4)}};

Мои настройки - это dict {'name': 'Russian name Саша', 'id': 12345}. Если я отрендерю его, я получу:

let SETTINGS = {
    "name": "Russian name \u0421\u0430\u0448\u0430",
    "id": 12345
}

Мне нужно получить не экранированные символы Юникода. То же самое я могу сделать в python, используя

json.dumps(data, encure_ascii=False)

Но фильтр tojson() принимает только один параметр (отступ).

1 Ответ

0 голосов
/ 01 мая 2020

Найдено способ для предоставления параметров покоя для фильтра tojson().

Начиная с Jinja 2.9 политики можно настроить в среде, что может незначительно влиять на поведение фильтров и других шаблонных конструкций. Их можно настроить с помощью атрибута policy.

Все, что мне нужно было сделать:

env = jinja2.Environment()
env.policies['json.dumps_kwargs'] = {'ensure_ascii': False, 'sort_keys': True}

Эта измененная среда не будет экранировать символы Юникода.

Результат можно безопасно использовать в JS без дополнительного экранирования.

...