Chcę użyć wywołania AJAX z parametrami w ramach szablonu Jinja2. Ale jak mogę to zrobić? Chcę coś takiego zrobić.AJAX i Jinja2
JavaScript:
$.get("test.html", { name: "John", time: "2pm" });
jinja szablon:
<div>
{{name}} {{time}}
</div>
Chcę użyć wywołania AJAX z parametrami w ramach szablonu Jinja2. Ale jak mogę to zrobić? Chcę coś takiego zrobić.AJAX i Jinja2
JavaScript:
$.get("test.html", { name: "John", time: "2pm" });
jinja szablon:
<div>
{{name}} {{time}}
</div>
Musisz uzyskać dostęp do obiektu żądania po stronie serwera, aby uzyskać argumenty. Zakładam, że używasz Flask, ale jeśli nie, podstawowa idea powinna być taka sama również w innych frameworkach internetowych. Powiedzmy, że masz prosty mały index.html, gdzie można użyć JavaScript, aby zapytanie Ajax:
$.get("{{ url_for('ajax') }}", {name: "John", time: "2pm"});
Należy pamiętać, że jeśli nie używasz Jinja2 renderować część skryptu, należy wymienić url_for() - połączenia z rzeczywistej zawartości, więc coś podobnego/ajax w moim przykładzie poniżej:
$.get("/ajax", {name: "John", time: "2pm"});
Teraz, po stronie serwera można mieć coś takiego:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/ajax')
def ajax():
#Access arguments via request.args
name = request.args.get('name')
time = request.args.get('time')
#NOTE: In real code, check that the arguments exist
#Silly logging call to show that arguments are there
app.logger.info(name)
app.logger.info(time)
#Do stuff here to do what you want or modify name/time
...
#Render template and pass the arguments to it
return render_template('ajax.html',
name=name,
time=time)
@app.route('/index')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
i ajax.html Wou ld wyglądać tak na przykład:
<h2>{{ name }}</h2>
<h2>{{ time }}</h2>
Więc request.args gdzie można uzyskać dostęp do argumentów przeszedłeś z GET, ale trzeba przekazać je bezpośrednio do Jinja2 z renderowanie_szablonu() rozmowy. Jinja2 jest po prostu szablonem i nie jest świadomy twoich argumentów (1), chyba że je przekażesz.
1) Z pewnymi wyjątkami. Flask na przykład przekazuje kilka argumentów niejawnie do Jinja2, tak jak obiekt żądania.
użyć jQuery aby zawartość div. Aby ułatwić korzystanie z przełączników elementów:
<div>
<span id="name">{{name}}</span> <span id="time">{{time}}</span>
</div>
name = $("#name").text()
time = $("#time").text()
$.get("test.html", {name : name, time : time});
Nie, co chcę zrobić, to wysłanie nazwy i czasu do serwera jako parametrów. Mogę zrobić coś takiego, jak nazwa == 'John' {wykonaj kod} – Newcoma
Dane są wysyłane w następujący sposób: {imię i nazwisko: "John", godzina: "godzina dwudziesta"}} – voscausa
Ale jak wypisać nazwę i godzinę serwer? Jeśli napiszę {{name}} lub {{time}} otrzymam jinja2.exceptions.UndefinedError: 'name' is undefined – Newcoma
Dzięki za Twój odpowiedź. Dowiedziałem się, że wszystko czego potrzebowałem to cxt ['myParam'] = req.args i mogłem zrobić {{myParam}} w szablonie. Format, który otrzymuję, to {'name': ['John'], 'time': ['2pm']}. Jak mogę go zdekodować, aby móc go używać w stanie. {% if myParam.name == 'John'%} – Newcoma
Myślę, że mam to teraz. Używam na przykład {{myParam.name [0]}} – Newcoma