如何从浏览器获取当前 url

How to get current url from browser

我需要从浏览器获取当前 url 并提取打开的模型的名称。 我有 3 个模型:审计、功能障碍和操作,操作有一个包含 2 个选择的选择字段:审计或功能障碍。所以当我创建一个动作时,我可以自己选择,但是当我创建一个审计时,然后在审计表单中创建一个动作,我希望选择字段从一开始就以 'audit' 作为类型。 我注意到,当我们从审计表单输入操作表单时,URL 仍然保留第一个模型的名称,即 'audit'。审计模型与操作模型有很多关系。我在 init 函数中写了这一行:

print (self.env._current_browser()._current_page) 

但它给了我这个错误:

AttributeError: 'Environment' object has no attribute '_current_browser'

我也试过这个代码:

    import os.path
    from urlparse import urlparse,parse_qs
    print 'hello update'
    url = os.environ["REQUEST_URI"] 
    parsed = urlparse.urlparse(url) 
    print urlparse.parse_qs(parsed.query)['model']

它给我这个错误:

KeyError: 'REQUEST_URI'

我也试过这个代码:

from openerp import http

print http.request.httprequest.full_path

它给了我这个:

/web/dataset/call_kw/action/create?

但我想要它 return 这个 url:

http://localhost:8069/web?#id=10&view_type=form&model=audit&menu_id=201&action=221

我正在使用 python 2.7、odoo 8、windows 7。

请帮忙。谢谢。

您可以使用 httprequest 获取当前路径

from openerp import http

print http.request.httprequest.full_path

但是你不应该在 init 方法中调用它,AFAIK init 将在启动时被调用一次。

编辑:

如果您需要将信息从一个模型传递到另一个模型,我建议您通过上下文传递值。

假设 auditaction 模型存在多对一关系。

class audit(models.Model):

    _name = "audit"

    action = fields.Many2one('action', string="Action")

在您的视图中传递上下文:

<field name="action" context="{'from':'This is from audit model'}"/>

并且当您处于 action 模型时,您可以使用此方法调用上下文:

self._context.get('from', False)

传递上下文不一定是字段,你也可以在按钮中传递。

我今天发现了这个:

我只需要将此属性添加到审核表单中的操作字段中即可

context="{'default_origin':'audit'}"

注意到我在动作模型内部有:

origin = fields.Selection([
                               ('audit', 'Audit'),
                               ('nonconformity', 'nonConformity'),                
                               ('dysfunction', 'Dysfunction')])