2013-06-08 12 views
5

Jinja2テンプレート内のパラメータを使用してAJAX呼び出しを使用します。しかし、私はそれを可能にする方法はありますか?私はこのようなことをしたい。AJAXとJinja2

はJavaScript:

$.get("test.html", { name: "John", time: "2pm" }); 

神社テンプレート:

<div> 
{{name}} {{time}} 
</div> 

答えて

4

引数を取得するには、サーバー側のリクエストオブジェクトにアクセスする必要があります。私はFlaskを使用していると仮定していますが、そうでない場合、基本的な考え方は他のWebフレームワークでも同じでなければなりません。あなたは、あなたのAjaxのクエリにするためにJavascriptを使用してシンプルで小さなindex.htmlを、持っているとしましょう:あなたはスクリプト部分をレンダリングするためにJinja2のを使用していない場合は、なurl_forを置き換えること

$.get("{{ url_for('ajax') }}", {name: "John", time: "2pm"}); 

注() - コール実際のURLと、そのさらに下の私の例では/ AJAXのようなもの:

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 WOU:

$.get("/ajax", {name: "John", time: "2pm"}); 

さて、サーバ側で、あなたはこのようなものを持っているでしょう例えば、このようなLDを見て何か:だから

<h2>{{ name }}</h2> 
<h2>{{ time }}</h2> 

request.argsあなたがGETで渡されました引数にアクセスできる場所ですが、あなたはrender_template()の呼び出しでJinja2のに明示的に渡す必要があります。 Jinja2はテンプレート言語に過ぎず、引数を渡さない限り、引数(1)を認識しません。

1)いくつかの例外を除いて。たとえば、Flaskは、Jinja2に要求オブジェクトのように暗黙的にいくつかの引数を渡します。

+0

ありがとう回答。私は必要なのは、このcxt ['myParam'] = req.argsであり、テンプレート内で{{myParam}}を行うことができたことです。私が得るフォーマットは、{'name':['John']、 'time':['2pm']}です。どのように私はそれをデコードするので、私はそれをある条件で使うことができます。 {%if myParam.name == 'John'%} – Newcoma

+0

私は今それを得たと思います。私は例えば{{myParam.name [0]}}を使用しています – Newcoma

0

使用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}); 
+0

私がしたいことは、名前と時刻がパラメータとしてサーバーに送信されません。だから、名前== 'John' {do some code} – Newcoma

+0

のようなデータを送ることができます。{name: "John"、time: "2pm"} – voscausa

+0

名前と時刻をどのように書きますか?サーバー? {{name}}または{{time}}と入力した場合、 jinja2.exceptions.UndefinedError 'name'は定義されていません Newcoma