在 Django/Jinja2 模板中将 dict 对象转换为字符串
如果您使用 Django 或 Jinja2,您以前可能遇到过这个问题。 我有一个如下所示的 JSON 字符串:
{
"data":{
"name":"parent",
"children":[
{
"name":"child_a",
"fav_colors":[
"blue",
"red"
]
},
{
"name":"child_b",
"fav_colors":[
"yellow",
"pink"
]
}
]
}
}
现在我想将其传递给我的 Jinja2 模板:
j = json.loads('<the above json here>')
self.render_response('my_template.html', j)
...并像这样迭代它:
<select>
{% for p in data recursive %}
<option disabled>{{ p.name }}</option>
{% for c in p.children %}
<option value="{{ c.fav_colors|safe }}">{{ c.name }}</option>
{% endfor %}
{% endfor %}
</select>
这就是我遇到问题的地方:除了 Jinja2 为 c 输出 unicode 编码值之外,一切正常.fav_colors。我需要 c.fav_colors 作为有效的 javascript 数组,以便我可以从 javascript 访问它。如何让 Jinja 将该值打印为 ascii 文本,例如: ['blue','red']
而不是 [u'blue', u'red']
?
If you use Django or Jinja2, you've probably ran into this problem before.
I have a JSON string that looks like this:
{
"data":{
"name":"parent",
"children":[
{
"name":"child_a",
"fav_colors":[
"blue",
"red"
]
},
{
"name":"child_b",
"fav_colors":[
"yellow",
"pink"
]
}
]
}
}
Now I want to pass this to my Jinja2 template:
j = json.loads('<the above json here>')
self.render_response('my_template.html', j)
...and iterate it like this:
<select>
{% for p in data recursive %}
<option disabled>{{ p.name }}</option>
{% for c in p.children %}
<option value="{{ c.fav_colors|safe }}">{{ c.name }}</option>
{% endfor %}
{% endfor %}
</select>
This is where I'm having the problem: everything works except Jinja2 outputs unicode encoded values for c.fav_colors. I need c.fav_colors as a valid javascript array so that I can access it from javascript. How can I get Jinja to print that value as ascii text like: ['blue','red']
instead of [u'blue', u'red']
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要将
fav_colors
列表转换回 JSON。也许最简单的方法是使用快速模板过滤器:所以现在你可以这样做
You need to convert the
fav_colors
list back to JSON. Probably the easiest way to do this would be with a quick template filter:So now you could do
Jinja2 现在内置了
tojson()
过滤器https://jinja.palletsprojects.com/en/3.1 .x/templates/#jinja-filters.tojson
可能不完全是OP(或其他读者)所需要的,但在这里值得一提。
Jinja2 now has a
tojson()
filter built-inhttps://jinja.palletsprojects.com/en/3.1.x/templates/#jinja-filters.tojson
Might not be exactly what OP (or another reader) needs, but worth mentioning here.