рендеринг JSON в шаблоне Django без необходимости экранировать весь JSON? - PullRequest
0 голосов
/ 27 ноября 2018

В моем представлении django я создаю данные JSON, которые должен использовать мой шаблон:

languages = { ... } 
context = {
   'languages': json.dumps(languages)
}
return render(request, 'template.html', context)

Затем в шаблоне вместо простого выполнения var languages = {{languages}}; Мне нужно сделать это, потому что некоторые строки могут сломатьсяjavascript:

var languages = JSON.parse('{{languages|safe|escapejs}}');

, который выводит грязный шарик, подобный этому:

var languages = JSON.parse('[{\u0022name_english\u0022: \u0022Afar\u0022, \u0022code\u0022: \u0022aa\u0022, \u0022name\u0022: \u0022Afar\u0022}, {\u0022name_english\u0022: \u0022Afrikaans\u0022, \u0022code\u0022:...

Мне бы очень хотелось, чтобы это было в моем отрендеренном шаблоне:

var languages = [{"name_english": "Afar", "code": "aa", "name": "Afar"}, {"name_english": "Afrikaans", "code": "af", "name": "Afrikaans"}, {"name_english": "Akan", ...

Но, как я уже сказал, нужно бежать.Есть ли способ просто избежать строк, которые действительно должны быть экранированы, а не весь JSON?Спасибо

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Я нашел этот шаблонный фильтр, который экранирует только то, что необходимо https://github.com/yourcelf/escapejson

он отображает {'test': '</script>'} как {"test": "<\/script>"}

0 голосов
/ 27 ноября 2018

Попробуйте использовать тег шаблона autoescape.

{% autoescape off %}
    var languages = JSON.parse('{{languages}}');
{% endautoescape %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...