#python #google-app-engine #jinja2
#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')
Ответ №1:
В вашем коде есть несколько ошибок, но, вероятно, проще всего привести пример того, что нужно сделать.
Создайте шаблон, подобный этому (в «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)))
Я не тестировал это, но это должно, по крайней мере, приблизить вас к исправлению вашего кода.
Ответ №2:
Возможно, вы захотите рассмотреть возможность использования 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')