如何在python中查询数据存储区并发布到jinja2模板?

时间:2016-10-24 03:15:06

标签: python google-app-engine jinja2

我正在尝试创建一个表单,用户可以输入体育场地址提交表单,查询Google App Engine数据存储并确认地址是否正确,然后发布到jinja2模板,地址是正确的或这些是最接近该点的地址。我正在使用python。

这是班级:

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')

2 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题,但最简单的方法是给您一个示例。

像这样创建一个模板(在“templates / searchindex.html”中):

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

您需要通过将此代码放在文件的顶部(所有类之外)来初始化Jinja:

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

然后在代码中使用模板:

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

我没有对此进行测试,但至少应该让您接近修复代码。

答案 1 :(得分:-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>
服务器端的

(使用Flask显示):

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')