Meine App ruft eine API auf, die ein Wörterbuch zurückgibt. Ich möchte Informationen aus diesem Diktat in der Ansicht an JavaScript übergeben. Ich verwende die Google Maps-API speziell in JS, daher möchte ich ihr eine Liste mit Tupeln mit den Long / Lat-Informationen übergeben. Ich weiß, dass render_template
diese Variablen an die Ansicht übergeben werden, damit sie in HTML verwendet werden können. Wie kann ich sie jedoch in der Vorlage an JavaScript übergeben?
from flask import Flask
from flask import render_template
app = Flask(__name__)
import foo_api
api = foo_api.API('API KEY')
@app.route('/')
def get_data():
events = api.call(get_event, arg0, arg1)
geocode = event['latitude'], event['longitude']
return render_template('get_data.html', geocode=geocode)
json
Modul zu verwenden, um Ihre Daten in Form einesDer ideale Weg, um so ziemlich jedes Python-Objekt in ein JavaScript-Objekt zu integrieren, ist die Verwendung von JSON. JSON eignet sich hervorragend als Format für die Übertragung zwischen Systemen, aber manchmal vergessen wir, dass es für JavaScript Object Notation steht. Dies bedeutet, dass das Einfügen von JSON in die Vorlage dem Einfügen von JavaScript-Code entspricht, der das Objekt beschreibt.
Flask bietet hierfür einen Jinja-Filter:
tojson
speichert die Struktur in einer JSON-Zeichenfolge und markiert sie als sicher, damit Jinja sie nicht automatisch erkennt.Dies funktioniert für jede Python-Struktur, die JSON-serialisierbar ist:
quelle
Uncaught SyntaxError: Unexpected token &
in die Javascript-Konsole gelangen.TypeError: Object of type Undefined is not JSON serializable
Durch die Verwendung eines Datenattributs für ein HTML-Element wird die Verwendung von Inline-Skripten vermieden, was wiederum bedeutet, dass Sie strengere CSP-Regeln verwenden können, um die Sicherheit zu erhöhen.
Geben Sie ein Datenattribut wie folgt an:
Greifen Sie dann in einer statischen JavaScript-Datei wie folgt darauf zu:
quelle
Alternativ können Sie einen Endpunkt hinzufügen, um Ihre Variable zurückzugeben:
Führen Sie dann eine XHR durch, um sie abzurufen:
quelle
Nur eine weitere alternative Lösung für diejenigen, die Variablen an ein Skript übergeben möchten, das mit flask bezogen wurde. Ich habe es nur geschafft, dies zum Laufen zu bringen, indem ich die Variablen außerhalb definiert und das Skript dann wie folgt aufgerufen habe:
Wenn ich Jinja-Variablen eingebe,
test123.js
funktioniert das nicht und Sie erhalten eine Fehlermeldung.quelle
/static/test123.js
), dass Sie falsch verstehen, wie es<script>
mitsrc
s funktioniert. Sie sind keine Flask-Funktion. Der Browser , wenn es ein solches Skript parst, macht eine separate HTTP - Anforderung das Skript zu erhalten. Der Skriptinhalt wird von Flask nicht in die Vorlage eingebrannt. In der Tat hat Flask das Senden des HTML-Vorlagen an den Browser wahrscheinlich abgeschlossen, als der Browser das Skript überhaupt anfordert.Arbeitsantworten sind bereits gegeben, aber ich möchte eine Prüfung hinzufügen, die als ausfallsicher fungiert, falls die Kolbenvariable nicht verfügbar ist. Wenn Sie verwenden:
Wenn ein Fehler vorliegt, der dazu führt, dass die Variable nicht vorhanden ist, können die daraus resultierenden Fehler zu unerwarteten Ergebnissen führen. Um es zu umgehen:
quelle
Dies verwendet jinja2, um das Geocode-Tupel in einen json-String umzuwandeln, und dann
JSON.parse
verwandelt das Javascript das in ein Javascript-Array.quelle
Nun, ich habe eine schwierige Methode für diesen Job. Die Idee ist wie folgt:
Erstellen Sie einige unsichtbare HTML-Tags wie
<label>, <p>, <input>
usw. im HTML-Text und erstellen Sie ein Muster in der Tag-ID. Verwenden Sie beispielsweise den Listenindex in der Tag-ID und den Listenwert im Namen der Tag-Klasse.Hier habe ich zwei Listen wartungs_next [] und wartungsblockzeit [] gleicher Länge. Ich möchte die Daten dieser beiden Listen mit der Flasche an Javascript übergeben. Also nehme ich ein unsichtbares Label-Tag und setze seinen Tag-Namen als Muster des Listenindex und setze seinen Klassennamen als Wert am Index.
Danach rufe ich die Daten in Javascript mit einer einfachen Javascript-Operation ab.
quelle
Einige js-Dateien stammen aus dem Internet oder der Bibliothek und werden nicht von Ihnen selbst geschrieben. Der Code, den sie erhalten, ist wie folgt variabel:
Diese Methode macht js-Dateien unverändert (Unabhängigkeit bewahren) und übergeben Variablen korrekt!
quelle