2016-10-24 2 views
0

ユーザーがスタジアムのアドレスを入力できるフォームを作成しようとしています。フォームを送信し、Google App Engine Datastoreを照会して住所が正しいことを確認してから、住所が正しいかどうかをjinja2テンプレートに投稿しますその点に最も近いアドレス。私はPythonを使用しています。ここでpythonでデータストアにクエリを行い、jinja2テンプレートに投稿する方法は?

クラスです:

class Search(webapp2.RequestHandler): 

    def get(self): 
     addressNumber = self.request.get('addressNumber') 
     streetName = self.request.get('streetName') 
     unitNumber = self.request.get('unitNumber') 
     city = self.request.get('city') 
     state = self.request.get('state') 
     zipCode = self.request.get('zipCode') 


     q = BigView.query() 
     q = q.filter(BigView.addressNumber == addressNumber) 
     q = q.filter(BigView.streetName == streetName) 
     q = q.filter(BigView.unitNumber == unitNumber) 
     q = q.filter(BigView.state == state) 
     q = q.filter(BigView.city == city) 
     q = q.filter(BigView.zipCode == zipCode) 

     results = q.fetch(10) 
     for pickview in results: 
      self.response.out.write('<blockquote>%s</blockquote>' % cgi.escape(q.addressNumber)) 

     self.render('searchindex.html') 

答えて

-1

あなたはAJAXを使用して検討する必要があります。 Jinja2は、ダイナミックなユーザーのやりとりを意図したものではない、より多くのテンプレート言語です。だから、あなたがサーバーに戻って物を検証したいのであれば、私はそれがAjaxを使っていることを見ています。したがって、ユーザーがフォームにデータを送信すると、サーバーに送信され、成功すると、アドレスが正しいことが表示されます。

※以下では、Flaskを使用してデモンストレーションしています。しかしそのコンセプトは適用されるべきです。次のような

何か:あなたのhtmlを想定し

がある:サーバー側の

<script type=text/javascript> 
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }}; 
    $(function() { 
    $('a#validateAddress').bind('click', function() { 
     $.getJSON($SCRIPT_ROOT + '/validate_address', { 
     a: $('input[name="address"]').val() 

     }, function(data) { 
     $("#result").text(data.result); 
     }); 
     return false; 
    }); 
    }); 
</script> 
<h1>jQuery Example</h1> 
<p><input type=text size=5 name=address> 
    <span id=result>?</span> 
<p><a href=# id=validateAddress>Validate Address in DB</a> 

(フラスコを使用して表示する):

from flask import Flask, jsonify, render_template, request 
app = Flask(__name__) 

@app.route('/validate_address') 
def validate_address(): 
    address_from_client = request.args.get('address') 
    **#Hit Your DB Here and Verify address is Right** the code above you wrote 
    return jsonify(result="Valid") 

@app.route('/') 
def index(): 
    return render_template('index.html') 
+0

誰が投票しましたか。少なくとも理由を説明してください。 – ibininja

0

あなたは間違っていくつかのことを持っていますあなたのコードでは、おそらくあなたに何をすべきかの例を与えるのが最も簡単です。

(「テンプレート/ searchindex.html」で)このようなテンプレートを作成します。

<html> 
<body> 
{% for result in results %} 
<blockquote>{{ result }}</blockquote> 
{% endfor %} 
<body> 
</html> 

あなたは(すべてのクラスの外で)あなたのファイルの先頭にこのコードを入れて神社を初期化する必要があります。

私はTHIをテストしていません

results = q.fetch(10) 
template = JINJA_ENVIRONMENT.get_template("searchindex.html") 
self.response.write(template.render(dict(results=results))) 

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader("templates"), # This is the directory where you store your templates 
    autoescape=True 
) 

次に、このようなあなたのコード内でテンプレートを使用しますしかし、少なくともあなたのコードを修正するのに近いあなたを取得する必要があります。

関連する問題