Jquery AJAX和Jinja2

Jquery AJAX和Jinja2,jquery,jinja2,Jquery,Jinja2,我想在Jinja2模板中使用带有参数的AJAX调用。但我怎样才能做到这一点呢?我想做这样的事 JavaScript: $.get(“test.html”,{name:“John”,time:“2pm”}); jinja模板: {{name}{{time} 使用jquery获取div的内容。为了便于使用元素选择器: <div> <span id="name">{{name}}</span> <span id="time">{{time}}

我想在Jinja2模板中使用带有参数的AJAX调用。但我怎样才能做到这一点呢?我想做这样的事

JavaScript:

$.get(“test.html”,{name:“John”,time:“2pm”});
jinja模板:


{{name}{{time}

使用jquery获取div的内容。为了便于使用元素选择器:

<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} );

{{name}{{time}
名称=$(“#名称”).text()
时间=$(“#时间”).text()
$.get(“test.html”,{name:name,time:time});

您需要访问服务器端的请求对象以获取参数。我假设您使用的是Flask,但如果不是,那么在其他web框架上的基本思想也应该是相同的。假设您有一个简单的小index.html,其中使用Javascript进行Ajax查询:

$.get("{{ url_for('ajax') }}", {name: "John", time: "2pm"});
请注意,如果您没有使用Jinja2来呈现脚本部分,请将url_for()调用替换为实际的url,下面的示例中类似于/ajax:

$.get("/ajax", {name: "John", time: "2pm"});
现在,在服务器端,您将有如下内容:

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)
而ajax.html看起来像这样,例如:

<h2>{{ name }}</h2>
<h2>{{ time }}</h2>
{{name}
{{time}}
因此,request.args是您可以访问使用GET传递的参数的地方,但您需要使用render_template()调用将它们显式传递给Jinja2。Jinja2只是一种模板语言,它不知道您的参数(1),除非您将它们传递给它


1) 除了一些例外。例如,Flask会隐式地向Jinja2传递一些参数,比如请求对象。

No我要做的是将名称和时间作为参数发送到服务器。所以我可以做一些事情,比如如果name='John'{dosomecode}数据发送方式是:{name:'John',time:'2pm}但是我如何在服务器上写出名称和时间呢?如果我键入{{name}}或{time},我会得到jinja2.exceptions.UndefinedError:'name'是未定义的{%extends'layout.html%}{{name}},这是jinja2您显示了您的模板。但您必须显示处理程序代码,因为我假设模板上下文(名称未定义)有问题。谢谢您的回答。我发现我所需要的只是这个cxt['myParam']=req.args,我可以在模板中执行{{myParam}}。我得到的格式是{'name':['John'],'time':['2pm']}。我如何解码它,以便在特定条件下使用它。{%if myParam.name=='John%}我想我现在明白了。例如,我正在使用{{myParam.name[0]}