Si usa Django o Jinja2, probablemente haya tenido este problema antes. que tienen una cadena JSON que tiene este aspecto:Conversión de objeto dict a cadena en la plantilla Django/Jinja2
{
"data":{
"name":"parent",
"children":[
{
"name":"child_a",
"fav_colors":[
"blue",
"red"
]
},
{
"name":"child_b",
"fav_colors":[
"yellow",
"pink"
]
}
]
}
}
Ahora quiero pasar esto a mi plantilla Jinja2:
j = json.loads('<the above json here>')
self.render_response('my_template.html', j)
... e iterar así:
<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>
Aquí es donde tengo el problema: todo funciona, excepto Jinja2 genera valores codificados en unicode para c.fav_colors. Necesito c.fav_colors como una matriz de JavaScript válida para poder acceder a ella desde JavaScript. ¿Cómo puedo obtener Jinja para imprimir ese valor como texto ascii como: ['blue','red']
en lugar de [u'blue', u'red']
?
Sin etiqueta de cierre? Además, ¿por qué no [{% para el elemento en c%} "elemento" {% if not forloop.last%}, {% endif%} {% endfor%}]? Esto es lo que las plantillas son para después de todo: convertir los valores de Python en lo que necesite la vista. – jpic
Actualicé esa etiqueta de opción. La sintaxis de bucle que estoy usando aquí es para mayor claridad. Estoy tratando de mostrar el problema: cómo sacar c.fav_colors como una matriz válida compatible con JavaScript: '['blue', 'red']' – ofko