我想创建符合twitter bootstrap的表单。根据{{3}}(web2py中包含的版本),html应如下所示:
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="inputEmail">Email</label>
<div class="controls">
<input type="text" id="inputEmail" placeholder="Email">
</div>
</div>
...
我目前正在使用SQLFORM
输出与此不相符的html(即使使用formstyle='divs'
)。此外,我希望我的html输出干净,没有像class="w2p_fl"
这样的web2py工件。所以我的想法是使用自定义表单。但是,这样做会有很多重复的代码。也就是说,基本上需要为每个字段重复以下内容。
{{=form.custom.begin}}
<div class="control-group">
{{=LABEL(form.custom.label['myfield'], _class='control-label',
_for='mytable_myfield')}}
<div class="controls">{{=form.custom.widget.myfield}}</div>
</div>
...
{{=form.custom.end}}
那么我怎样才能重复上面的代码单元,以便用{{= bootstrap_field(db.mytable.myfield)}}或者其他一些方法替换DRY来替换它?
web2py的方法是什么?创建一个视图功能?在控制器返回的字典中传递一个函数?创建我自己的html助手?创建我自己的小部件?另一种方式?
答案 0 :(得分:3)
如果你正在使用Bootstrap 2,你可以这样做:
form = SQLFORM(..., formstyle='bootstrap')
对于Bootstrap 3(或您想要创建的任何其他自定义表单样式),formstyle
参数可以是生成表单DOM的函数(或其他可调用函数)。该函数将传递一个表单和一个fields
对象,它是一个元组列表,每个元组包含一个CSS id,label,input元素和(可能是空的)注释/帮助文本。要了解这样的功能应该是什么样的,请查看the one used for Bootstrap 2 forms。