Maison > développement back-end > Tutoriel Python > Comment utiliser en toute sécurité les données JSON rendues à partir d'un modèle Jinja en JavaScript ?

Comment utiliser en toute sécurité les données JSON rendues à partir d'un modèle Jinja en JavaScript ?

DDD
Libérer: 2025-01-05 16:46:39
original
581 Les gens l'ont consulté

How to Safely Use JSON Data Rendered from a Jinja Template in JavaScript?

JavaScript génère une erreur de syntaxe avec les données rendues dans un modèle Jinja

Problème :

Tentative d'utilisation des données JSON rendues dans un Jinja Le modèle dans JavaScript échoue avec une « Erreur de syntaxe : jeton inattendu '&'. » erreur. Comment ces données JSON rendues peuvent-elles être utilisées efficacement en JavaScript ?

Solution :

L'environnement Jinja de Flask échappe de manière inhérente aux données rendues dans les modèles HTML pour des raisons de sécurité. Lors du passage d'objets Python à interpréter comme JSON, le filtre tojson doit être utilisé pour convertir de manière appropriée et marquer les données comme sûres :

return render_template('tree.html', tree=tree)
Copier après la connexion
Copier après la connexion
var tree = {{ tree|tojson }};
Copier après la connexion

Si JSON n'est pas rendu ou a été précédemment converti en une chaîne, le filtre sécurisé ou le wrapper de balisage peut être utilisé pour garantir la sécurité rendu :

# already dumped to json
return render_template('tree.html', tree=json.dumps(tree))
Copier après la connexion
var tree = {{ tree|safe }};
Copier après la connexion
# already dumped and marked safe
return render_template('tree.html', tree=Markup(json.dumps(tree)))
Copier après la connexion
var tree = {{ tree }};
Copier après la connexion

Alternativement, si les données sont utilisées uniquement dans Jinja et ne sont pas transmises à JavaScript, JSON n'est pas requis. Les données Python originales peuvent être transmises et utilisées directement dans le modèle :

return render_template('tree.html', tree=tree)
Copier après la connexion
Copier après la connexion
{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal