奥多。在 werkzeug 中动态注入 url
Odoo. Dynamically inject url in werkzeug
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 为 werkzeug
存储 RouteMap
的位置。
我也试过以如下方式向控制器添加修饰方法:
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。
Odoo 9 路由的参考文档是 here,以防万一。
Odoo 计算网络路由并将其存储在 routing_map
(计算 here in 8.0, and there in 9.0)中。
该地图通过 routing_map()
方法 (8.0, 9.0) 延迟计算并暴露给 ir.http
模型中的扩展模块。 ir.http._find_handler()
方法在请求处理期间被 ir.http._dispatch()
调用,以在 routing_map
.
中定位匹配的路由
您可以 override/extend 实现您自己的动态路由,类似于 web
模块的方式。
后备路由: 动态处理与现有 "static" 规则不匹配的请求的一个有趣的替代方法是 ir.http
的 _handle_exception()
method。每当请求处理阶段发生异常时都会调用它,包括未找到匹配路由时。它 returns 的任何内容都将用作响应。
web
模块将其扩展为:
- 提供 "user-friendly" 个错误页面(404、500 等)
- 允许用户将任意回退路由绑定到文档 coming from the attachments (
ir.attachment
) tables。
这有时用于具有转换 "hack" 以映射来自以前网站的 URL。
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 为 werkzeug
存储 RouteMap
的位置。
我也试过以如下方式向控制器添加修饰方法:
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。
Odoo 9 路由的参考文档是 here,以防万一。
Odoo 计算网络路由并将其存储在 routing_map
(计算 here in 8.0, and there in 9.0)中。
该地图通过 routing_map()
方法 (8.0, 9.0) 延迟计算并暴露给 ir.http
模型中的扩展模块。 ir.http._find_handler()
方法在请求处理期间被 ir.http._dispatch()
调用,以在 routing_map
.
您可以 override/extend 实现您自己的动态路由,类似于 web
模块的方式。
后备路由: 动态处理与现有 "static" 规则不匹配的请求的一个有趣的替代方法是 ir.http
的 _handle_exception()
method。每当请求处理阶段发生异常时都会调用它,包括未找到匹配路由时。它 returns 的任何内容都将用作响应。
web
模块将其扩展为:
- 提供 "user-friendly" 个错误页面(404、500 等)
- 允许用户将任意回退路由绑定到文档 coming from the attachments (
ir.attachment
) tables。
这有时用于具有转换 "hack" 以映射来自以前网站的 URL。