Odoo。在werkzeug动态注入网址

时间:2016-02-17 00:05:52

标签: python openerp odoo-8 werkzeug odoo-9

Odoo通过装饰器进行路径定义。这几乎没问题,但是......我们想编写模块,这将允许我们进行动态重写。

https://www.odoo.com/documentation/8.0/reference/http.html - 在这里我们可以找到添加路线的标准方式。

看起来像:

class MyController(openerp.http.Controller):
    @route('/some_url', auth='public')
    def handler(self):
        return stuff()

理想情况下,我们希望找到odoo为RouteMap存储werkzeug的位置。

我还试图将装饰方法添加到控制器中,如:

def my_redirect(new_url):
    t = lambda x: werkzeug.utils.redirect(new_url, 301)
    return t

MyController.test = http.route('/old_url/')(my_redirect('/new_url/'))

但在这种情况下,我们会收到错误here

1 个答案:

答案 0 :(得分:3)

Odoo 9路线的参考文档为here,以防万一。

Odoo在routing_map(计算here in 8.0there in 9.0)中计算并存储网络路线。 该地图通过ir.http方法(8.09.0)延迟计算并向routing_map()模型中的扩展模块公开。 ir.http._find_handler()方法在请求处理期间由ir.http._dispatch()调用,以在routing_map中找到匹配的路由。

您可以覆盖/扩展其中任何一个以实现您自己的动态路由,类似于web模块的工作方式。

后备路由:动态处理与现有“静态”规则不匹配的请求的一个有趣替代方案是ir.http的{​​{3}}。只要在请求处理阶段发生异常(包括未找到匹配的路由),就会调用它。它返回的任何内容都将用作回复。

web模块将其扩展为:

  • 提供“用户友好”错误页面(404,500等)
  • 允许用户将任意后备路由绑定到文档_handle_exception() method 有时会使用这种过渡“hack”来映射以前网站的URL。