在django模板中呈现JSON而不必转义整个JSON?

时间:2018-11-27 14:17:17

标签: json django django-templates

在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 :(得分:0)

尝试使用自动转义模板标签。

{% autoescape off %}
    var languages = JSON.parse('{{languages}}');
{% endautoescape %}

答案 1 :(得分:0)

我发现此模板过滤器仅逃避了必要的https://github.com/yourcelf/escapejson

它将{'test': '</script>'}渲染为{"test": "<\/script>"}