【问题标题】:rendering JSON in django template without having to escape the entire JSON?在 django 模板中渲染 JSON 而不必转义整个 JSON?
【发布时间】:2019-04-29 07:32:09
【问题描述】:

在我的 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}}');

它会输出一个像这样的混乱 blob:

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?谢谢

【问题讨论】:

    标签: json django django-templates


    【解决方案1】:

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

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

    【讨论】:

    • 这适用于一些/大多数 JSON,但问题是 json 的某些部分可能需要转义。例如,如果有一个包含一些 html 的字符串,例如 </script>
    【解决方案2】:

    我发现这个模板过滤器只转义必要的https://github.com/yourcelf/escapejson

    它将{'test': '</script>'} 呈现为{"test": "<\/script>"}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-21
      • 2017-10-12
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多