30.
方式一:使用Qweb
带站点基础框的页面
后台代码
1. @http.route('/trial', auth='public', type='http', website=True)
2. def trial(self, **kw):
3. # ...
4. values = {
5. 'plan': trial_plan,
6. }
7.
8. return request.render('saas_portal.try_trial', values)
模板
1.
2. 3. 4. 11. 12. <script> 13. $(document).ready(function() { 14. $('div.oe_structure div.container').css('height', $(window).innerHeight()); 15. }); 16. </script> 17.
完全自定义的页面
后台代码
1. @http.route('/payment/order_status_show', type='http', auth='public', website=True, methods=['GET'], csrf=False)
2. def order_status_show(self, **params):
3. # ...
4. values = {
5. 'transaction': tx,
6. 'order': order[0].id
7. }
8. return request.render("payment.order_status_show", values)
模板
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12. 订单确认
13.
14.
15.
16.
17.
18.
19.
20.
28.
29.
30.
方式二:使用Jinja2
以odoo数据库创建页面为例
后台代码
1. import jinja2
2.
3. loader = jinja2.PackageLoader('odoo.addons.web', "views")
4. env = jinja2.Environment(loader=loader, autoescape=True)
5.
6. class Database(http.Controller):
7.
8. def _render_template(self, **d):
9. d.setdefault('manage',True)
10. d['insecure'] = odoo.tools.config['admin_passwd'] == 'admin'
11. d['list_db'] = odoo.tools.config['list_db']
12. d['langs'] = odoo.service.db.exp_list_lang()
13. d['countries'] = odoo.service.db.exp_list_countries()
14. # databases list
15. d['databases'] = []
16. try:
17. d['databases'] = http.db_list()
18. except odoo.exceptions.AccessDenied:
19. monodb = db_monodb()
20. if monodb:
21. d['databases'] = [monodb]
22. return env.get_template("database_manager.html").render(d)
23.
24. @http.route('/web/database/manager', type='http', auth="none")
25. def manager(self, **kw):
26. return self._render_template(
模板(节选部分)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
31.
32.
33.
34.
40.
41.
42.
43.
44.
45.
46.
47. Load demonstration data
48. (Check this box to evaluate Odoo)
49.
50.
51.
使用Jinja2引擎的模板文件直接在文件系统里,渲染页面时不需要读数据库,相对快一些,但管理不如Qweb可以直接在线编辑那样方便