2

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/'))

但在这种情况下,我们在这里得到错误。

4

1 回答 1

3

Odoo 9 路线的参考文档在这里,以防万一。

Odoo 计算并存储网络路由routing_map在 8.0中计算,在 9.0中计算)。ir.http通过routing_map()方法 ( 8.0 , 9.0 ) ,地图被延迟计算并暴露给模型中的扩展模块。在请求处理期间调用该ir.http._find_handler()方法以在.ir.http._dispatch()routing_map

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


后备路由:动态处理与现有“静态”规则不匹配的请求的一个有趣的替代_handle_exception()方法ir.http. 每当在请求处理阶段发生异常时都会调用它,包括找不到匹配的路由时。它返回的任何内容都将用作响应。

web模块将其扩展到:

  • 提供“用户友好”的错误页面(404、500 等)
  • 允许用户将任意回退路由绑定到来自 attachments( ir.attachment) 表的文档。
    这有时会使用转换“hack”来映射以前网站的 URL。
于 2016-02-17T08:48:51.453 回答