转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189391.html

一:controller简述

odoo里面的controller相似于springMVC,也是根据url来控制请求,把请求处理映射到具体某个方法上的。

类比于springmvc中,根据请求,在请求处理方法中处理数据,然后控制view页面跳转。

在odoo中的controller也是类似的工作原理:

在view层,新建xml文件,定义视图模版;

然后在controller目录下,新建controller类,在其中,定义请求处理方法,在方法上方通过 @http:route('url',auth='public/user') 控制请求映射;

在方法中,处理数据,然后通过 http.request.render('模块名.视图模版id',视图模版所需参数列表......) 把参数传递给视图模板并渲染出页面,然后返回客户端作响应。

二:一个简单的课程列表展示

1:首先,新建一个视图模板文件

views/template.xml

<odoo>
<data>
<template id="template_index">
<t t-foreach="courses" t-as="course">
<p><t t-esc="course"/></p>
</t>
</template>
</data>
</odoo>

模版文件解析:

id为:template_index

模版内容:遍历 courses,并打印输出。

2:在manifest中注册视图模版

  'data': [
'views/template.xml',
],

3:在controller文件夹下,新建controller.py

先在__init__.py导入controller,否则odoo找不到

# -*- coding: utf-8 -*-
from odoo import http
class Controller(http.Controller):
@http.route("/open/courses/",auth="public")
def index(self,**kw):
return http.request.render("模块名.template_index",{'courses':['odoo','python','bootstarp']})

controller内容:

继承 http.Controller类定义控制器;

通过 @http.route(url,auth=)控制请求映射,以及访问权限(公开 or 需要登陆)

最后,通过 http.request.render('模块名.视图模板id',{'参数名'(与视图模版中遍历的参数一致):参数值})  传参并渲染得到响应页面并返回。

4:启动odoo,安装/更新模块,然后通过  ip:8069/url  发起访问,即可到达响应页面。(url为上面定义控制器时的映射路径)

三:使用ORM为视图文件传递内容

继承自models.Model而定义的类默认具有了odoo的ORM接口,也就是说,该类的所有实例对象都会自动保存到数据库中。

根据这个特性,我们可以这样往视图模版传递数据:

定义一个数据模型;

在odoo中创建该数据模型的一系列纪录(一条记录一个实例对象);

在视图文件中,遍历、使用对象,通过  对象.字段名  调用纪录的具体字段内容;

最后,在控制器中,使用环境上下文,查找该数据模型的所有纪录,然后传参即可。

在视图文件中遍历对象,通过对象.字段名调用数据:

            <t t-foreach="courses" t-as="course">
<p><t t-esc="course.id"/></p> <p><t t-esc="course.name"/></p>
</t>

在控制器中,先用环境上下文获取数据模型的所有纪录,得到一个纪录集。然后通过 纪录集.search()函数,返回一个纪录列表,传递给视图模板:

    def index(self,**kw):
#通过环境上下文获取数据模型的所有纪录
courses=http.request.env['openacademy.course']
#纪录集.search(),返回纪录列表传递给视图模版进行渲染
return http.request.render("openacademy.template_index",{'courses':courses.search([])})

最后,更新模块,在模块中创建一些纪录,然后通过url访问,查看纪录集遍历结果。

odoo10学习笔记十七:controller的更多相关文章

  1. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

  2. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  3. odoo10学习笔记十二:web controller

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189332.html 一:路由 odoo.http.route(route=None, **kw) 装饰器 ...

  4. Spring MVC学习笔记——给Controller和视图传值

    一.给Controller传值,值将显示在控制台 1.第一种:使用@RequestParam,改HelloController.java //RequestMapping表示用哪一个url来对应 @R ...

  5. ASP.NET MVC5学习笔记之Controller执行ControllerDescriptor和ActionDescriptor

    一. ControllerDescriptor说明 ControllerDescriptor是一个抽象类,它定义的接口代码如下: public abstract class ControllerDes ...

  6. ASP.NET MVC5学习笔记之Controller同步执行架构分析

    在开始之前,声明一下,由于ASP.NET MVC5正式发布了,后面的分析将基于ASP.NET MVC5最新的源代码.在前面的内容我们分析了怎样根据路由信息来确定Controller的类型,并最终生成C ...

  7. ASP.NET MVC4学习笔记之Controller激活的扩展

    一. 为什么要进行扩展 在前面的分析中,我们知道默认的Controller激活系统只能实例化无参构造函数的Controller类型,但在某些情况一下,我们希望某些服务的实例能够自动注入到Control ...

  8. ASP.NET MVC4学习笔记之Controller的激活

    一. 高层相关类说明 当路由系统根据请求Url收集路由信息后,下一步就要将路由信息传给Controller激活系统,Controller激活系统负责实现了IController接口的Controlle ...

  9. ASP.NET MVC 学习笔记-5.Controller与View的数据传递

    ViewData属性 ViewData属性是System.Web.Mvc.ControllerBase中的一个属性,它相当于一个数据字典.Controller中向该字典写入数据,ViewData[“K ...

随机推荐

  1. 具名插槽 slot (二)

    slot 是父组件与子组件的通信方式可以将父组件的内容显示在子组件当中或者说可以将 让你封装的组件变的更加的灵活,强壮! 在子组件中  通过为多个slot进行命名.来接受父组件中的不同内容的数据  这 ...

  2. Apache(基于端口号)

    1.配置服务器的IP地址 2.  创建网站数据目录 (1).分别创建端口为6111,6222的网站数据目录 (2).分别在网站数据目录中写入不同的内容 3.在配置文件中描述基于端口号的虚拟主机 (1) ...

  3. Pwn-level2(x64)

    题目地址 https://dn.jarvisoj.com/challengefiles/level2_x64.04d700633c6dc26afc6a1e7e9df8c94e 已经知道了它是64位了, ...

  4. 【Ribbon篇四】自定义负载均衡策略(4)

    官方文档特别指出:自定义的负载均衡配置类不能放在 @componentScan 所扫描的当前包下及其子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是说我们达不到特殊化定制 ...

  5. go 基本语法

    ====type==== import ( "fmt" ) func main() { type bigint byte //定义类型 var a bigint fmt.Print ...

  6. sqlserver deadlock

    当时系统测试的时候,由于使用了自动化测试跑脚本,一下子出了很多sqlserver deadlock的问题. 都处于system test阶段了,哪儿还有时间仔细分析这些死锁是怎么出来的,直接上retr ...

  7. Paper | Densely Connected Convolutional Networks

    目录 黄高老师190919在北航的报告听后感 故事背景 网络结构 Dense block DenseNet 过渡层 成长率 瓶颈层 细节 实验 发表在2017 CVPR. 摘要 Recent work ...

  8. mac pe简单安装方法

    1.工具下载 TechTool Pro for mac V11.0.4:http://www.pc6.com/mac/112462.html 2.准备16g u盘 3.安装工具并按照注册码注册 在Te ...

  9. Jvisualvm简单使用教程

    本博客介绍一下jvisualvm的简单使用教程,jvisualvm功能还是挺多的,不过本博客之简单介绍一下 1.拿线程快照信息 在jdk安装目录找到jvisualvm.exe,${JDK_HOME}\ ...

  10. PDF文件添加二维码水印教程

    maven配置iText的jar,主要不是所有私服都有iText的jar,maven仓库没有的,可以去https://mvnrepository.com/artifact/com.itextpdf/i ...