如何从浏览器获取当前 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 将在启动时被调用一次。
编辑:
如果您需要将信息从一个模型传递到另一个模型,我建议您通过上下文传递值。
假设 audit
与 action
模型存在多对一关系。
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')])
我需要从浏览器获取当前 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 将在启动时被调用一次。
编辑:
如果您需要将信息从一个模型传递到另一个模型,我建议您通过上下文传递值。
假设 audit
与 action
模型存在多对一关系。
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')])