在对象属性的“js”脚本中应用 django 的模板过滤器
Posted
技术标签:
【中文标题】在对象属性的“js”脚本中应用 django 的模板过滤器【英文标题】:Apply django's template filters inside a `js` script on an object's attribute 【发布时间】:2018-08-09 14:53:40 【问题描述】:我无法在对象属性的 js
脚本中使用 django 的模板过滤器。
这段代码返回一个js
SyntaxError:
<script>
obj.geometry.geojson | safe
</script>
如果将过滤器应用于对象,则不会引发错误:
<script>
obj | safe
</script>
上面GeoJson
文件的内容如下图所示:
"type": "Polygon", "coordinates": [ [ [ 3, 36 ], ...
我显然不想将引号字符 ("
) 转义为 (&quot;
),因此我可以稍后通过 JSON.parse()
将其从字符串转换为对象。
【问题讨论】:
【参考方案1】:在视图中生成新的 GeoJson 字符串并将其传递给类似如下的模板:
return render(
request,
'my_template.html',
'obj': obj, 'geo_json': json.dumps(obj.geometry.geojson)
)
现在你需要 GeoJson 内容的任何地方都使用它,如下所示:
<script>
geo_json | safe
</script>
更新:
您也可以通过context-processors 或template-tags 处理此问题,但这种方式可能很难且不必要...
【讨论】:
它似乎不起作用,因为输出仍然在JS
变量中转义。
有没有办法直接从DetailView::get_context_data()
更改json字段并将其传递给模板? serialize('geojson', [context['object']])
没有给出预期的结果。
是的,通过某种方式这个动作是可能的,但这些方式不是捷径
是的,这个问题现在似乎已经解决了,因为我正在使用您的代码,但实际上没有必要将它从视图中转储到模板中,因为字符串在模板中被转义(其中 @ 987654328@ 是必要的)。以上是关于在对象属性的“js”脚本中应用 django 的模板过滤器的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:无法在 Django REST 框架中解压不可迭代的 int 对象