Heim >Web-Frontend >js-Tutorial >Warum erhält mein JavaScript beim Rendern von JSON-Daten aus einer Jinja-Vorlage einen Syntaxfehler?

Warum erhält mein JavaScript beim Rendern von JSON-Daten aus einer Jinja-Vorlage einen Syntaxfehler?

Susan Sarandon
Susan SarandonOriginal
2024-12-11 21:37:10349Durchsuche

Why Does My JavaScript Get a SyntaxError When Rendering JSON Data from a Jinja Template?

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

Einführung

Bei der Übergabe von JSON-Daten von einer Flask-Route an eine Jinja-Vorlage kann es sein, dass der Browser wirft einen SyntaxError: Unexpected token '&'. Beim Rendern der Daten wurde ein Eigenschaftsname erwartet. Für den erfolgreichen Umgang mit Vorlagen ist es von entscheidender Bedeutung, zu verstehen, wie mit gerenderten JSON-Daten in JavaScript umgegangen wird.

Escape und JSON-Rendering

Die Jinja-Umgebung von Flask maskiert in HTML-Vorlagen gerenderte Daten automatisch, um Sicherheitslücken zu vermeiden. Für Daten, die als JSON behandelt werden müssen, stellt Flask den Tojson-Filter bereit, der die Daten in JSON ausgibt und als sicher markiert. Durch die Verwendung des Tojson-Filters wird sichergestellt, dass die Daten ohne Escapezeichen gerendert werden, sodass sie in JavaScript korrekt analysiert werden können.

tree = get_nodes("Root")
return render_template("folder.html", data=tree|tojson)
var tree = {{ tree|tojson }};

Alternativ kann in älteren Flask-Versionen der sichere Filter zum Markieren verwendet werden Daten als sicher:

var tree = {{ tree|tojson|safe }};

Sichere Filter verwenden

Wenn die Daten bereits gespeichert wurden JSON, der sichere Filter kann verwendet werden, um es als sicher für das Rendern ohne Escape zu markieren:

return render_template('tree.html', tree=json.dumps(tree))
var tree = {{ tree|safe }};

Das Einschließen der JSON-Zeichenfolge in Markup entspricht auch der Verwendung des sicheren Filters:

return render_template('tree.html', tree=Markup(json.dumps(tree)))
var tree = {{ tree }};

Python-Daten in Jinja verwenden

Wenn die Daten nicht an JavaScript übergeben, sondern in Jinja verwendet werden, können Sie dies tun Lassen Sie das JSON-Rendering weg und verwenden Sie Python-Daten direkt:

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

Das obige ist der detaillierte Inhalt vonWarum erhält mein JavaScript beim Rendern von JSON-Daten aus einer Jinja-Vorlage einen Syntaxfehler?. 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