odoo通过iframe插入html页面

本文介绍如何使用Odoo框架扩展销售模块的功能,包括修改文件结构、创建js.xml文件以加载自定义JavaScript脚本,以及通过view.xml更新用户界面。文中详细展示了如何实现订单视图中的文件加载功能。

1、文件结构


2、js.xml文件

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <template id="assets_backend" name="sales_extend assets" inherit_id="web.assets_common">
            <xpath expr="." position="inside">
                <script type="text/JavaScript" src="/sales_extend/static/js/sales_extend.js"></script>
            </xpath>
        </template>
   </data>
</odoo>


3、sale_extend.js
/**
 * Created by badboy on 2017/1/10.
 */
var url = '';

function check_url() {
	if ( url != window.location.href ) {
		var id = getQueryString('id');
		var model = getQueryString('model');
		var view_type = getQueryString('view_type');
		if (view_type == 'form' && model == 'sale.order') {
			var myiframe = document.getElementById("myiframe");
			if (myiframe != null)
				myiframe.src = '/loadfile?id=' + id;
		}
		url = window.location.href;
	}
}

function getQueryString(name) {
	var reg = new RegExp("(^|&|#)" + name + "=([^&]*)(&|$)", "i");
	var r = window.location.href.match(reg);
	if (r != null) return unescape(r[2]); return null;
}

setInterval(check_url, 1000);

4、view.xml部分代码

<notebook position="replace">
    <group>
        <field name="project_file" string="下载地址"/>
    </group>
    <group>
        <iframe id="myiframe" src="/loadfile" frameBorder="0" width="100%" scrolling="no"></iframe>
    </group>
</notebook>


Odoo 17 中实现按钮点击后返回 HTML 页面或返回 HTML 响应的功能,可以通过自定义控制器和视图来完成。以下是具体的方法: ### 实现步骤 #### 1. 创建一个自定义模块 首先创建一个新的自定义模块,用于承载该功能。 #### 2. 定义模型中的按钮方法 在模型中定义一个按钮触发的方法,通过 `return` 返回一个重定向响应或将 HTML 渲染为字符串并返回。 ```python from odoo import models, fields, api import werkzeug.utils class CustomModel(models.Model): _name = 'custom.model' _description = 'Custom Model' name = fields.Char(string="Name") def action_redirect_to_html(self): # 方法一:直接返回 URL 跳转 return { 'type': 'ir.actions.act_url', 'url': '/my_custom_page', # 自定义路径 'target': 'self', } # 或者方法二:渲染 HTML 并返回 (需配合 controller 使用) # return self.env['ir.ui.view'].render_template('module_name.template_id') ``` 上述代码展示了两种方式: - **方法一** 是通过 `act_url` 动作跳转到指定的 URL。 - **方法二** 则是直接渲染模板并将 HTML 字符串作为响应返回[^1]。 #### 3. 配置 XML 按钮 在视图文件中配置按钮以便调用上面定义的方法。 ```xml <record id="view_form_custom_model" model="ir.ui.view"> <field name="name">custom.model.form</field> <field name="model">custom.model</field> <field name="arch" type="xml"> <form string="Custom Form"> <sheet> <group> <field name="name"/> </group> </sheet> <!-- 添加按钮 --> <footer> <button name="action_redirect_to_html" type="object" string="Redirect to HTML Page"/> </footer> </form> </field> </record> ``` #### 4. 编写 Controller 处理请求 为了支持动态生成的 HTML 页面,需要编写一个自定义的 HTTP 控制器。 ```python from odoo.http import request, route, Controller class MyController(Controller): @route('/my_custom_page', auth='public', website=True) def my_custom_page(self, **kw): # 可以在这里传递参数给模板 values = {'message': 'Welcome to the custom page!'} return request.render('your_module_name.custom_template', values) ``` #### 5. 创建 QWeb 模板 最后,在 `views/templates.xml` 文件中定义一个 QWeb 模板供控制器使用。 ```xml <template id="custom_template" name="My Custom Template"> <div> <h1>Custom HTML Page</h1> <p t-esc="message"></p> </div> </template> ``` --- ### 总结 以上方法实现了从按钮点击出发,最终展示一个自定义 HTML 页面的效果。核心在于结合 Odoo 的 `controller` 和 `QWeb template` 来构建动态页面,并通过模型中的方法提供入口。 --- ### 问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值