Tipfy & Jinja: создание URL выхода для каждой страницы
У меня есть шаблон jinja с обычными шаблонными ссылками, одна из которых - ссылка "Выйти". URL этой ссылки должен быть создан с помощью Users.create_logout_url() перед отображением страницы.
Я хотел бы не создавать этот URL и добавлять его в свой render_response для каждого обработчика get/post. Я искал альтернативы, но не нашел функционального пути для этого.
BaseRequestHandler
Это кажется самым чистым подходом, но я не уверен, как это сделать. Будет ли это случай
self.vars['logout_link'] = users.create_logout_url(self.request.path))
..и затем во всех стандартных обработчиках ответов:
return render_response('template.html', **vars)
?
Декораторы
Это похоже на другой вариант, хотя кажется немного грязным. Я предполагаю, что это будет работать таким же образом (назначение ссылки выхода из локальной переменной в функции-обертке).
Обработка контекста?
Я использую tipfy/jinja, который, насколько я могу судить, не поддерживает это.
Любой совет, какой путь я должен исследовать дальше?
Спасибо
2 ответа
Я делаю нечто похожее с Jinja / GAE и использую BaseHandler + шаблон, который я включаю. BaseHandler:
class BaseHandler(webapp2.RequestHandler):
...
def render_jinja(self, name, **data):
data['logout_url']=users.create_logout_url(self.request.uri)
template = jinja_environment.get_template('templates/'+name+'.html')
self.response.out.write(template.render(data))
Тогда я могу унаследовать базовый обработчик, например, для обработчиков форм:
class FileUploadFormHandler(BaseHandler):
def get(self):
...
self.render_jinja('contact_jinja', form=form, ...
Не использовав ни одного фреймворка, я не уверен, есть ли хороший способ добавить его в шаблон. Может быть какая-то промежуточная программа, которую вы можете реализовать, но, как я уже сказал, у меня нет опыта работы с этими платформами.
Однако задумывались ли вы о том, чтобы иметь универсальный URL для выхода из системы с обработчиком, который даст 303 правильному URL для пользователя?