网站Form表单提交
class Main(http.Controller):
@http.route('/inquiry/form', type='http', auth="public", website=True)
def inquiry_form_template(self, **kw):
return request.render("my_hostel.hostel_inquiry_form")
render
def render(self, template, qcontext=None, lazy=True, **kw):
QWeb 模板的延迟渲染,给定模板的实际呈现将在调度结束时进行。同时,模板和qcontext可以被更改,甚至被静态响应所取代。
template:要使用的模板
gcontext:要使用的渲染上下文
lazy:是否应将模板渲染推迟到最后一刻
kw:转发到 werkzeug 的 Response 对象
website=Ture表示使用官方模板 需要下载website模块 并且在manifest文件depends中引用
把我们写好的XML文件也加入到manifest文件data中
# -*- coding: utf-8 -*-
{
......
"depends": ['mail','base','website'],
"license": "AGPL-3",
'data': [
......
"views/form_template.xml",
],
......
}
form_template.xml
<odoo>
<template id="hostel_inquiry_form"
name="Hostel Inquiry Form">
<t t-call="website.layout">
<section class="s_website_form" data-snippet="s_website_form">
<div class="container">
<div class="row">
<div class="col-md-12 mb64">
<div class="aboutus-section pl-5 pr-5 p-t-100 p-b-50">
<div class="wrapper wrapper--w900">
<div class="card">
<div class="card-body mt8">
<form action="/inquiry/submit" method="POST" class="o_mark_required" id="inquiry_form" enctype="multipart/form-data">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="row">
<div class="form-group col-md-12">
<label for="name"> Your Name </label>
<input type="text" class="form-control" name="name"
id="name" required="True" />
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
<label for="phone"> Phone </label>
<input type="text" class="form-control" name="phone"
id="phone" required="True" />
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
<label for="email"> Email ID </label>
<input type="text" class="form-control" name="email"
id="email"/>
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
<label for="book_fy"> Booking for the Year </label>
<input type="text" class="form-control" name="book_fy"
id="book_fy"/>
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
<label for="queries"> Your Question </label>
<input type="text" class="form-control" name="queries"
id="queries"/>
</div>
</div>
<div class="form-group row">
<div class="col-sm-12">
<button type="submit"
class="btn btn-primary btn-lg a-submit">
<span>Submit</span>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</t>
</template>
</odoo>
访问网站就能看见我们写的模板了 输入数据点击submit 提交数据
根据XML中action="/inquiry/submit" 我们定义路由 把刚才输入的值作为参数传入进来
@http.route('/inquiry/submit', type='http', auth="public", website=True)
def inquiry_form(self, **kwargs):
inquiry_obj = request.env['hostel.inquiries']
form_vals = {
'name': kwargs.get('name') or '',
'email': kwargs.get('email') or '',
'phone': kwargs.get('phone') or '',
'book_fy': kwargs.get('book_fy') or '',
'queries': kwargs.get('queries') or '',
}
submit_success = inquiry_obj.sudo().create(form_vals)
return request.redirect('/contactus-thank-you')
使用“ submit_success = inquiry_obj.sudo().create(form_vals) ” 创建记录
最后重定向到页面