**轉載請注明原文地址:[http://www.cnblogs.com/ygj0930/p/7155356.html](http://www.cnblogs.com/ygj0930/p/7155356.html "view: odoo10學習筆記十七:controller")**
一: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
~~~
# -*- 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開發教程一(構建模塊)
- Odoo10開發教程二(基本視圖)
- Odoo10開發教程三(模型關聯)
- Odoo10開發教程四(繼承)
- Odoo10開發教程五(計算字段和默認值)
- Odoo10開發教程六(高級視圖)
- Odoo10開發教程七(工作流和安全)
- 參考手冊
- odoo V10中文參考手冊(一:ORM API)
- odoo V10中文參考手冊(指導規范)
- 技巧
- odoo 常用widget
- Odoo(OpenERP)開發實踐:菜單隱藏(1)
- Odoo(OpenERP)開發實踐:菜單隱藏(2)
- Odoo(OpenERP)開發實踐:數據模型學習
- Odoo中自動備份數據庫
- Odoo(OpenERP)應用實踐: 使用db-filter參數實現通過域名指定訪問哪個數據庫
- Odoo(OpenERP)配置文件openerp-server.conf詳解
- Odoo(OpenERP v8)數據模型(Data Model)
- odoo10學習筆記十七:controller
- Qweb定義