python - 奥杜。在 werkzeug 中动态注入(inject) url

标签 python odoo 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 存储 werkzeugRouteMap 的位置。

我还尝试以如下方式向 Controller 添加装饰方法:

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.0there in 9.0 )。 该映射是延迟计算的,并通过 routing_map() 方法( 8.09.0 )暴露给 ir.http 模型中的扩展模块。在请求处理期间,ir.http._dispatch() 会调用 ir.http._find_handler() 方法,以在 routing_map 中查找匹配的路由>.

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


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

web 模块将其扩展为:

关于python - 奥杜。在 werkzeug 中动态注入(inject) url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35445449/

相关文章:

xml - 如何删除“创建 : option in search view opened after clicking Search view in odoo 8?

odoo - 如何在 odoo 中打开默认过滤器 AND 在一起?

python - 在 spaCy 管道中对自定义组件进行基准测试的最佳方法是什么?

python - 停止线程 Python

python - 通过 getattr 访问方法

python - 如何在odoo中获取新记录Id?

python - Odoo 10 - XMLRPC - 使用外部 XML 标识符

python - Keras:batch_size 的类型错误

python - 在 odoo 上的继承模型中使用字段

xml - 如何在 qweb 报告中输出没有时间的 odoo 8 日期时间字段?