Ich habe eine Seite mit einer Schaltfläche, die eine ajax
post
zu einer flask
Route macht. Ich möchte, dass die Route eine Nachricht berechnet (vereinfacht durch Hardcoding für das Beispiel) und sie an eine andere Route zurückgibt und die Seite, auf der sich der Benutzer befindet, neu lädt. redirect(urlfor())
ruft die andere Route auf, aber render_template
scheint nicht aufgerufen zu werden, da die Seite nicht neu geladen wird.Flask redirect (urforor()) lädt die Seite nicht
init Py
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
@app.route('/second_route', methods=['POST'])
def second_route():
print request.json
return redirect(url_for('hello_world', message='test'))
@app.route('/')
def hello_world(message=None):
return render_template('index.html', message=message)
app.run()
index.html
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#mybutton').click(function() {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/second_route",
data: JSON.stringify({}),
success: [],
dataType: "json"
});
});
});
</script>
</head>
<body>
{{ message }}
<button id="mybutton" name="mybutton" type="button">Click Me!</button>
</body>
</html>
so war dies ein vereinfachtes Beispiel. 'second_route' wird verwendet, um Daten in eine Datenbank zu übertragen. 'message' wird verwendet, um den Erfolg dieser Daten zurückzugeben, und das erneute Laden der Seite erfordert eine Menge Daten aus der Datenbank, so dass die" done "-Funktion mit dem div-Tag (in diesem Beispiel funktioniert nicht) in meiner Anwendung funktioniert. Wenn ich 'window.location.href' verwendet hätte, hätte ich keinen Zugriff auf die Nachricht. Tut mir leid, mein einfaches Beispiel vereinfacht die Dinge. – user2242044
nur um zu klären, fragen Sie die Datenbank beim ersten Laden von 'index.html' ab? Ich denke, beides zu integrieren war das, was du brauchst. Enthaltene Klausel für den Fall, dass ein AJAX-Aufruf in einen Fehler geriet. – Mangohero1
Ich bin mir nicht sicher, ob ich die Nachricht in 'done' speichern und dann die '/' route neu laden kann, weil das die Nachricht überschreibt. – user2242044