【问题标题】:Tipfy & Jinja: Creating a logout URL for every pageTipfy & Jinja:为每个页面创建一个注销 URL
【发布时间】:2012-01-09 21:09:08
【问题描述】:

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

我希望避免为每个 get/post 处理程序生成此 URL 并将其添加到我的 render_response 中。我已经研究了替代方案,但没有找到解决此问题的实用方法。

BaseRequestHandler

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

self.vars['logout_link'] = users.create_logout_url(self.request.path))

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

return render_response('template.html', **vars)

?

装饰器

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

上下文处理?

我正在使用tipfy/jinja,据我所知,它似乎不支持这一点。

任何建议我应该进一步调查哪条路径?

谢谢

【问题讨论】:

    标签: python google-app-engine tipfy jinja2


    【解决方案1】:

    我对 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))
    

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

    class FileUploadFormHandler(BaseHandler):
        def get(self):
            ...
            self.render_jinja('contact_jinja', form=form, ...
    

    【讨论】:

    • 这似乎是向 render_response 添加“全局变量”的最佳方式 - 谢谢!
    • 另外,这是保持模板渲染干燥的绝佳方式。当我复制粘贴几行代码来布置基本站点结构时,我知道我做错了:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多