Если вы используете webapp2 ...
Параметры запроса можно легко получить, если вы используете webapp2.request как словарь.
webapp2.request.get('[parameter]', '[optionalDefaultValue]')
Чтобы применить образец (http://foo.bar? A = 1 & b = 2 & c = true):
a = webapp2.request.get('a') # a = 1
b = webapp2.request.get('b') # b = 2
c = webapp2.request.get('c') # c = true, may need further parsing to make it bool
Если вы хотите просто разобрать строку запроса, просто позвоните:
qstring = webapp2.request.query_string
# qstring = '?a=1&b=2&c=true
Как только вы соберете свои переменные, просто передайте их в метод jinja2.render_template () так же, как и во всем остальном.
Это действительно не намного легче, чем это.
Обновление:
У меня есть довольно уникальный способ управления параметрами, но я попытаюсь объяснить простую версию.
Предполагая следующую строку запроса
http://foo.bar?a=1&b=2&c=true
Вот как я бы написал обработчик GET:
class BaseHandler(webapp2.RequestHandler):
def jinja2(self):
return jinja2.get_jinja2(app=self.app)
def render_template(self, template, **context):
self.response.write(self.jinja2.render_template(template, **context))
def get(self, **params):
context = {}
context['a'] = webapp2.request.get('a')
context['b'] = webapp2.request.get('b')
context['c'] = webapp2.request.get('c')
self.render_template([template], **context)
Итак, реализация, которую я использую, немного отличается. Я также использую параметр _defaults, который передается через маршрутизатор, и параметр _meta (то есть title / description / url), который создается путем поиска uri в пользовательской структуре urls.
В моем базовом обработчике я настраиваю jinja и оборачиваю экземпляр в метод, который проще вызывать (например, render_template). Я не придумал эту идею, я думаю, что получил ее из документов webapp2, но я отвлекся.
Важной частью является параметр 'context'. Вот где вы складываете все данные, которые вы хотите отправить в шаблон. Теперь любое значение, доступное в этом объекте, теперь будет доступно в шаблоне.
Например, вы можете напечатать значение для 'a', используя:
{{ a }}
Если вы передаете массив значений в качестве одного из параметров, вы также можете перечислять их и вызывать конкретные свойства напрямую, используя точечную запись.
Как устроены ваши обработчики, полностью зависит от вас. В отличие от многих платформ, GAE обеспечивает большую гибкость в этом аспекте. То, как я это делаю, требует большого количества наследования, поэтому мне не нужно много повторяться. Немного сложно объяснить более подробно без вставки всего моего handlers.py, но это суть моего базового обработчика, от которого наследуются все остальные мои обработчики. Единственное заметное отличие - я определяю контекст как self.context, чтобы дочерние классы могли получить к нему доступ. Это кажется довольно запутанным в коде, но как только все подключено, добавить страницы / маршруты почти без усилий.