转载请注明原文地址: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. RSA 登陆加密与解密

    最近公司项目验收后,客户请来的信息安全技术人员对我们的网站进行了各种安全测试与排查问题,其中就有一个登陆时的加密问题.本来如果只是单纯的加密,可以直接在前台用MD5加密,将加密的值添加到数据库即可.但 ...

  2. jqs实现图片轮播--通过点击按钮来实现

    <!-- 布局思路:一个大的div,中有一个ul.和一个箭头的div css样似描述: 整个盒子距离顶部100px,又水平居中 盒子的宽高为图片的实际宽高 由于每次都是看见了一张图片:有两种方式 ...

  3. centos7.6离线安装mysql5.7(附下载链接)

    本来打算直接用原生yum源安装,但是跨国访问网络太慢,只好采用离线安装的方式,原理就是把所需的rpm下载下来再上传服务器安装. 1.rpm文件下载地址: 目录: http://repo.mysql.c ...

  4. 【西北师大-2108Java】第三次作业成绩汇总

    [西北师大-2108Java]第三次作业成绩汇总 熟悉PTA平台线上测试环境: 理解用户自定义类的定义: 掌握对象的声明: 学会使用构造函数初始化对象: 使用类属性与方法的使用掌握使用: 掌握pack ...

  5. C++ 模板类示例 template class

    声明和实现在一个文件中: template<class T> class book { public: book(); ~book(); private: }; template<c ...

  6. Jsoup获取部分页面数据失败 Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml

    用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...

  7. 动态设置html的font-size值

    PC端 (function () { function setRootFontSize() { let rem, rootWidth; let rootHtml = document.document ...

  8. 用 FFLIB 实现 Apex 企业设计模式

    Apex 企业设计模式将应用分为服务层.模型层.选择逻辑层.工作单元几个部分.FFLIB 是一个开源的 Apex 框架,可以帮助开发者快速建立相关的功能. FFLIB 的安装 FFLIB 可以直接部署 ...

  9. @Component, @Service, @Controller, @Repository区别

    @Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 @Componen ...

  10. 中国移动明确5G手机入网技术标准:四大要求缺一不可!

    原文: https://m.sohu.com/a/355533798_208899?strategyid=00014 日前,中国移动在2020年5G终端产品规划中明确了一系列详细的技术要求,针对明年入 ...