0

0

Odoo自定义模块中实现按钮点击下载静态文件教程

花韻仙語

花韻仙語

发布时间:2025-10-13 13:51:10

|

316人浏览过

|

来源于php中文网

原创

Odoo自定义模块中实现按钮点击下载静态文件教程

本教程详细讲解如何在odoo自定义模块中,通过在视图中添加按钮,实现用户点击后从服务器下载预设的静态文件(如pdf、xlsx)。文章将涵盖文件存放的最佳实践、按钮方法的实现逻辑,以及如何利用ir.actions.act_url动作类型来触发文件下载,确保操作流程清晰且易于部署。

在Odoo自定义模块开发中,有时需要提供一个功能,允许用户通过点击界面上的按钮来下载存储在服务器上的静态文件,例如操作手册、报告模板或附件。本文将详细指导您如何在Odoo 14社区版(或其他兼容版本)中实现这一功能。

1. 静态文件的存放位置

Odoo模块化的设计要求静态文件(如图片、CSS、JS、文档等)应放置在模块的特定子目录中,以便Odoo能够正确地识别和提供这些资源。对于可供客户端下载的静态文件,推荐将其放置在模块的static目录下。

典型的文件路径结构如下:

your_module_name/
├── __init__.py
├── __manifest__.py
├── models/
│   └── models.py
├── views/
│   └── views.xml
└── static/
    └── src/
        └── documents/
            └── manual.pdf
            └── template.xlsx

在这个例子中,manual.pdf 和 template.xlsx 是我们希望用户下载的静态文件。src/documents/ 是一个可选的子目录,用于更好地组织文件。

2. 在视图中添加下载按钮

首先,您需要在自定义视图(例如表单视图或列表视图)中添加一个按钮,该按钮将触发文件下载操作。这个按钮通常会调用一个Python方法。

在您的XML视图文件(例如views/views.xml)中,可以这样定义一个按钮:


    your.model.form
    your.model
    
        
  • name="download_manual_document": 这是将在Python模型中实现的方法名。
  • type="object": 表明这个按钮点击后会调用一个Python方法。
  • string="下载操作手册": 按钮上显示的文本。

3. 实现下载逻辑:Python方法

接下来,在您的自定义模型(例如models/models.py)中,需要实现与按钮name属性对应的Python方法。这个方法的核心是返回一个特殊字典,该字典指示Odoo执行一个URL重定向动作。

Noya
Noya

让线框图变成高保真设计。

下载
from odoo import models, fields, api

class YourModel(models.Model):
    _name = 'your.model'
    _description = 'Your Custom Model'

    name = fields.Char(string="Name")
    # ... 其他字段

    def download_manual_document(self):
        """
        按钮点击后,触发下载静态文件的方法。
        """
        # 构造静态文件的URL路径
        # 路径格式为 /your_module_name/static/path/to/your_file.extension
        file_url = '/your_module_name/static/src/documents/manual.pdf'

        # 返回一个ir.actions.act_url类型的动作
        return {
            'type': 'ir.actions.act_url',  # 指定动作类型为URL重定向
            'url': file_url,              # 要重定向到的URL,即静态文件的路径
            'target': 'self',             # 'self'表示在当前窗口/标签页打开,'new'表示在新窗口/标签页打开
        }

    def download_excel_template(self):
        """
        示例:下载另一个静态文件(如XLSX)。
        """
        file_url = '/your_module_name/static/src/documents/template.xlsx'
        return {
            'type': 'ir.actions.act_url',
            'url': file_url,
            'target': 'new', # 示例在新标签页打开
        }

关键点解释:

  • 'type': 'ir.actions.act_url': 这是Odoo内置的一种动作类型,用于指示客户端浏览器导航到一个指定的URL。
  • 'url': file_url: 这是最重要的部分。它指定了静态文件的完整Web路径。Odoo会自动将模块的static目录映射到Web根路径下的/your_module_name/static/。因此,如果您的文件在your_module_name/static/src/documents/manual.pdf,那么对应的URL就是/your_module_name/static/src/documents/manual.pdf。
  • 'target': 'self':
    • 'self':文件将在当前浏览器窗口或标签页中打开/下载。对于大多数可直接在浏览器中预览的文件(如PDF),浏览器可能会尝试预览而不是直接下载。对于其他文件类型(如XLSX),通常会触发下载。
    • 'new':文件将在一个新的浏览器窗口或标签页中打开/下载。这通常是更好的用户体验,因为它不会中断用户在当前Odoo界面上的操作。

4. 示例代码整合

为了更清晰地展示,我们将上述代码片段整合到一起。

your_module_name/__manifest__.py

{
    'name': 'Your Custom Module',
    'version': '1.0',
    'summary': 'A module to demonstrate static file download',
    'category': 'Tools',
    'depends': ['base'],
    'data': [
        'security/ir.model.access.csv', # 如果有模型,通常需要访问权限
        'views/views.xml',
    ],
    'installable': True,
    'application': True,
    'auto_install': False,
    'license': 'LGPL-3',
}

your_module_name/models/models.py

from odoo import models, fields, api

class YourModel(models.Model):
    _name = 'your.model'
    _description = 'Your Custom Model'

    name = fields.Char(string="Name", required=True)
    description = fields.Text(string="Description")

    def download_manual_document(self):
        """
        按钮点击后,触发下载静态文件的方法。
        """
        file_url = '/your_module_name/static/src/documents/manual.pdf'
        return {
            'type': 'ir.actions.act_url',
            'url': file_url,
            'target': 'new', # 推荐在新标签页打开
        }

    def download_excel_template(self):
        """
        示例:下载另一个静态文件(如XLSX)。
        """
        file_url = '/your_module_name/static/src/documents/template.xlsx'
        return {
            'type': 'ir.actions.act_url',
            'url': file_url,
            'target': 'new',
        }

your_module_name/views/views.xml


    
    
    

    
    
        Your Model
        your.model
        tree,form
    

    
    
        your.model.tree
        your.model
        
            
                
                
            
        
    

    
    
        your.model.form
        your.model
        
            

your_module_name/static/src/documents/manual.pdf (一个实际的PDF文件) your_module_name/static/src/documents/template.xlsx (一个实际的XLSX文件)

5. 注意事项与最佳实践

  1. 文件路径准确性:确保file_url中的模块名、static目录结构以及文件名与实际文件路径完全匹配,包括大小写。
  2. 模块安装与更新
    • 在首次部署模块时,需要安装或升级模块以使Odoo识别新的视图和模型。
    • 如果修改了静态文件路径或添加了新的静态文件,通常不需要强制升级模块,因为Odoo会在运行时直接通过Web服务器访问这些文件。但如果静态文件路径在Python代码或XML视图中被硬编码,并有改动,则需要更新模块以加载这些改动。
  3. 文件权限:确保Odoo运行的用户对your_module_name/static/目录及其子目录中的文件拥有读取权限,否则Odoo服务器将无法提供这些文件。
  4. 文件类型兼容性:ir.actions.act_url方法适用于任何可以通过URL直接访问的文件。浏览器对不同文件类型的处理方式可能不同(预览、直接下载)。实践证明,PDF和XLSX文件均能良好工作。
  5. 用户体验:考虑使用target='new'在新标签页中打开下载链接,以避免用户离开当前Odoo界面。

总结

通过以上步骤,您可以在Odoo自定义模块中轻松实现按钮点击下载静态文件的功能。核心在于将静态文件放置在模块的static目录下,并在按钮对应的Python方法中返回一个ir.actions.act_url类型的字典,指定正确的URL路径。这种方法简洁高效,是Odoo开发中处理静态文件下载的标准实践。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

716

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

626

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

739

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1236

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

575

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

699

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.7万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.7万人学习

CSS教程
CSS教程

共754课时 | 17.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号