Pour transmettre des données contextuelles au code javascript, vous devez les sérialiser de manière à ce qu'elles soient "comprises" par javascript (à savoir JSON). Vous devez également le marquer comme sûr à l'aide de la balise safe
Filtre Jinja, pour éviter que vos données ne soient mises en forme par des htmlescapes.
Vous pouvez y parvenir en faisant quelque chose comme ça :
La vue
import json
@app.route('/')
def my_view():
data = [1, 'foo']
return render_template('index.html', data=json.dumps(data))
Le modèle
<script type="text/javascript">
function test_func(data) {
console.log(data);
}
test_func({{ data|safe }})
</script>
Editer - réponse exacte
Ainsi, pour obtenir exactement ce que vous voulez (boucler sur une liste d'éléments et les transmettre à une fonction javascript), vous devez sérialiser chaque élément de votre liste séparément. Votre code ressemblerait alors à ceci :
La vue
import json
@app.route('/')
def my_view():
data = [1, "foo"]
return render_template('index.html', data=map(json.dumps, data))
Le modèle
{% for item in data %}
<span onclick=someFunction({{ item|safe }});>{{ item }}</span>
{% endfor %}
Edit 2
Dans mon exemple, j'utilise Flask
Je ne sais pas quel cadre vous utilisez, mais vous avez l'idée, vous devez juste l'adapter au cadre que vous utilisez.
Edit 3 (Avertissement de sécurité)
NE FAITES JAMAIS CELA AVEC DES DONNÉES FOURNIES PAR L'UTILISATEUR, MAIS UNIQUEMENT AVEC DES DONNÉES DE CONFIANCE !
Sinon, vous exposeriez votre application à des vulnérabilités XSS !