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 для пользователя?

Другие вопросы по тегам