3

我有一个带有常用样板链接的 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,据我所知,它似乎不支持这一点。

有什么建议我应该进一步调查哪条路径?

谢谢

4

2 回答 2

6

我对 Jinja / GAE 做了类似的事情,我使用了 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, ...
于 2011-12-01T08:27:05.950 回答
4

没有使用任何一个框架,我不确定是否有一种很好的方法可以将它添加到模板中。您可能可以实现某种形式的中间件,但正如我所说,我没有使用这些框架的经验。

但是,您是否考虑过拥有一个通用注销 URL,其处理程序将为用户提供 303 到正确的 URL?

于 2011-12-01T02:34:07.090 回答