在对象属性的 `js` 脚本中应用 django 的模板过滤器

Apply django's template filters inside a `js` script on an object's attribute

我无法在对象属性的 js 脚本中使用 Django 的模板过滤器。

这段代码returns一个js语法错误:

<script>
    {{ obj.geometry.geojson | safe }}
</script>

如果过滤器应用于对象,则不会引发错误:

<script>
    {{ obj | safe }}
</script>

上面GeoJson文件的内容如下图:

{ "type": "Polygon", "coordinates": [ [ [ 3, 36 ], ... }

我显然不希望将引号字符 (") 转义为 (&quot;),这样我可以 JSON.parse() 稍后将其从字符串转换为一个对象。

在视图中生成新的 GeoJson 字符串并将其传递给类似于以下的模板:

return render(
           request,
           'my_template.html',
           {'obj': obj, 'geo_json': json.dumps(obj.geometry.geojson)}
       )

现在任何需要 GeoJson 内容的地方都可以使用它,如下所示:

<script>
    {{ geo_json | safe }}
</script>

更新:

你也可以通过 context-processors or template-tags 来处理这个问题,但这种方式可能很难而且没有必要...