Tipfy&Jinja:为每个页面创建一个注销URL

Cer*_*rzi 3 python google-app-engine jinja2 tipfy

我有一个jinja模板,带有通常的样板链接,其中一个是"退出"链接.在呈现页面之前,必须使用Users.create_logout_url()生成此链接的URL.

我想避免生成此URL并将其添加到每个get/post处理程序的render_response中.我已经研究过替代品,但还没有找到一种功能性的方法来解决这个问题.

BaseRequestHandler

这似乎是最干净的方法,但我不确定如何去做.会不会是这样的

self.vars['logout_link'] = users.create_logout_url(self.request.path))
Run Code Online (Sandbox Code Playgroud)

..然后,在所有标准响应处理程序中:

return render_response('template.html', **vars)
Run Code Online (Sandbox Code Playgroud)

装饰

这似乎是另一种选择,虽然看起来有点凌乱.我想它可以以相同的方式工作(将logout链接分配给包装函数中的局部变量).

上下文处理?

我正在使用tipfy/jinja,据我所知,这似乎不支持这个.

有什么建议我应该进一步调查吗?

谢谢

Nik*_*ntz 6

我使用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))
Run Code Online (Sandbox Code Playgroud)

然后我可以继承例如表单处理程序的basehandler:

class FileUploadFormHandler(BaseHandler):
    def get(self):
        ...
        self.render_jinja('contact_jinja', form=form, ...
Run Code Online (Sandbox Code Playgroud)