美文网首页
odoo访问静态资源方法

odoo访问静态资源方法

作者: lovedrose | 来源:发表于2017-03-06 11:52 被阅读1309次

在odoo开发里面,view都是使用qweb渲染的。那么对于前端的同学来说,他们希望是使用H5来做页面,那么odoo是如何实现的呢?笔者查看了一下odoo的源码,在addons里面的web模块发现了答案。
在addons/web/controllers/main.py里面,有一个渲染数据库模版页面的方法
<pre>
<code>```def render_template(self, **kw)
pass
return env.get_template('database_manager.html').render()

</pre>
然后又在views里面发现了database_manager.html页面
![web](https://img.haomeiwen.com/i143568/b079b994f9c8c034.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- - -
经过一番捣鼓,总结出以下步骤:
<i><b>注意</b>:我是自定义的模块,继承project开发</i><ol>
<li>在views里面新增一个页面:
![list_project](https://img.haomeiwen.com/i143568/469bf4cdf672f822.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</li>
<li>在controller里面添加一个方法:list_project
调用get_template()方法,该方法传入一个静态资源的字符串参数,只要该模块被注册了,那么会自动找到该资源
后面链式调用render()方法,是渲染该页面,可以将需要传到页面的参数放到里面,该参数类型为字典类型
<pre>
<code>```@http.route('/tm/tm/listProject/', auth='public')
    def list_project(self, **kw):
        projects = http.request.env['project.project'].search([])
        return env.get_template('list_project.html').render({'projects': projects})
</pre>```</code>
</li>
<li>定义env
这里需要注意的是jinja2.PackgeLoader()该方法,需要修改对应注册的模块名字,如我自定义的模块为odoo.addons.tm, 第二个参数是你静态资源存放的位置,这样就不需要在__manifest__.py清单文件添加data数据(没试过将*.html添加到data该做法)
<pre>
<code>```import jinja2
import json
import os
import sys

if hasattr(sys, 'frozen'):
    # When running on compiled windows binary, we don't have access to package loader.
    path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'views'))
    loader = jinja2.FileSystemLoader(path)
else:
    loader = jinja2.PackageLoader('odoo.addons.tm', "views")```</code>
</pre>
</li>
<li>编辑list_project.html
<pre>
<code>```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的项目</title>
</head>
<body>
    {% if projects %}
        {% for project in projects %}
            <a href="/tm/tm/detail/{{ project.id }}">{{project.name}}</a><br>
            {{project.desc}}<br>
            <img src="data:image/gif;base64,{{ project.pic }}"/>
        {% endfor %}
    {% endif %}
</body>
</html>```</code>
</pre>

</li>
<li>重启odoo服务器,update 模块, 在浏览器输出localhost:8069/tm/tm/listProject,效果见下图:
![Paste_Image.png](https://img.haomeiwen.com/i143568/d7e8f706e378bda7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</li>
</ol>

GOOD LUCK!



相关文章

  • odoo访问静态资源方法

    在odoo开发里面,view都是使用qweb渲染的。那么对于前端的同学来说,他们希望是使用H5来做页面,那么odo...

  • java内部类

    静态内部类: 静态内部类本身可以访问外部的静态资源,包括静态私有资源。但是不能访问非静态资源,可以不依赖外部类实例...

  • springmvc、springboot静态资源访问配置

    如何访问项目中的静态资源? 一.springmvc springmvc中访问静态资源,如果DispatcherSe...

  • day41HTTP网络协议说明

    课程介绍部分 作业: 网站访问资源概念 静态资源: 动态资源 伪静态资源 网站访问度量方式 企业常用网站web服务...

  • Spring Boot集成模板引擎Beetl

    一、静态资源访问 静态资源:js、css、html、音视频等静态资源路径:指系统可直接访问的路径,且路径下的所有文...

  • 对Method、Field的访问

    访问非静态方法 访问静态方法 访问Java的构造方法 访问基本类型数据数组 访问引用数据类型数组

  • Spring Boot静态资源访问

    在web开发中,静态资源的访问时必不可少的,比如image、css、js等。SpringBoot对静态资源访问提供...

  • SpringBoot下搭建SSM框架开发web网站(二)

    SpringBoot 中静态资源的存放位置 先总结,后废话 一定要导入这个依赖,不然访问不了静态资源 总结静态资源...

  • Spring Boot 系列(四)静态资源处理

    在web开发中,静态资源的访问是必不可少的,如:图片、js、css 等资源的访问。 spring Boot 对静态...

  • jni常见的使用

    1. 访问java属性。 2. 访问java静态属性。 3. 访问java方法。 4. 访问java静态方法。 5...

网友评论

      本文标题:odoo访问静态资源方法

      本文链接:https://www.haomeiwen.com/subject/oiwygttx.html