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
522 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!

source:php.cn
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