Heim >Backend-Entwicklung >Python-Tutorial >Wie verwende ich aus einer Jinja-Vorlage gerenderte JSON-Daten sicher in JavaScript?

Wie verwende ich aus einer Jinja-Vorlage gerenderte JSON-Daten sicher in JavaScript?

DDD
DDDOriginal
2025-01-05 16:46:39567Durchsuche

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

JavaScript löst einen Syntaxfehler bei in einer Jinja-Vorlage gerenderten Daten aus

Problem:

Versuch, in einer Jinja-Vorlage gerenderte JSON-Daten zu verwenden Die Vorlage in JavaScript schlägt mit der Meldung „SyntaxError: Unexpected token '&'“ fehl. Fehler. Wie können diese gerenderten JSON-Daten effektiv in JavaScript verwendet werden?

Lösung:

Die Jinja-Umgebung von Flask entgeht aus Sicherheitsgründen inhärent den in HTML-Vorlagen gerenderten Daten. Bei der Übergabe von Python-Objekten zur Interpretation als JSON sollte der Tojson-Filter verwendet werden, um die Daten entsprechend zu konvertieren und als sicher zu markieren:

return render_template('tree.html', tree=tree)
var tree = {{ tree|tojson }};

Wenn JSON nicht gerendert wird oder zuvor konvertiert wurde Eine Zeichenfolge, der sichere Filter oder der Markup-Wrapper können verwendet werden, um die Sicherheit zu gewährleisten Rendering:

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

Alternativ ist JSON nicht erforderlich, wenn die Daten ausschließlich innerhalb von Jinja verwendet und nicht an JavaScript übergeben werden. Die ursprünglichen Python-Daten können direkt in der Vorlage übergeben und verwendet werden:

return render_template('tree.html', tree=tree)
{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}

Das obige ist der detaillierte Inhalt vonWie verwende ich aus einer Jinja-Vorlage gerenderte JSON-Daten sicher in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn