Если вы используете Django или Jinja2, вы, вероятно, столкнулись с этой проблемой раньше. У меня есть JSON строку, которая выглядит следующим образом:Преобразование объекта dict в строку в шаблоне Django/Jinja2
{
"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 выводит кодированные значения unicode для c.fav_colors. Мне нужен c.fav_colors как допустимый массив javascript, чтобы я мог получить к нему доступ из javascript. Как я могу заставить Jinja напечатать это значение как текст ascii, например: ['blue','red']
вместо [u'blue', u'red']
?
Нет закрывающий тег? Кроме того, почему бы не [{% for item in c%} "item" {% if not forloop.last%}, {% endif%} {% endfor%}]? Это то, за чем все шаблоны: преобразование значений python во все, что необходимо для представления. – jpic
Обновлен этот тег опции. Синтаксис цикла, который я использую для ясности. Я просто пытаюсь показать проблему: как вывести c.fav_colors в качестве допустимого javascript-совместимого массива: '['blue', 'red']' – ofko