我刚刚开始使用松脆的形式,我注意到表格形式的描述有些不规则,以及它在路上有什么影响
来自github中的example,布局如下所述
class MessageForm(forms.Form):
[...]
# Uni-form
helper = FormHelper()
helper.form_class = 'form-horizontal'
helper.layout = Layout(
Field('text_input', css_class='input-xlarge'),
Field('textarea', rows="3", css_class='input-xlarge'),
'radio_buttons',
Field('checkboxes', style="background: #FAFAFA; padding: 10px;"),
AppendedText('appended_text', '.00'),
PrependedText('prepended_text', '<input type="checkbox" checked="checked" value="" id="" name="">', active=True),
PrependedText('prepended_text_two', '@'),
'multicolon_select',
FormActions(
Submit('save_changes', 'Save changes', css_class="btn-primary"),
Submit('cancel', 'Cancel'),
)
)
中的部分
class ExampleForm(forms.Form):
[...]
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
'first arg is the legend of the fieldset',
'like_website',
'favorite_number',
'favorite_color',
'favorite_food',
'notes'
),
ButtonHolder(
Submit('submit', 'Submit', css_class='button white')
)
)
super(ExampleForm, self).__init__(*args, **kwargs)
我很困惑地看到在文档中使用def __init__(self, *args, **kwargs):
行作为示例。为什么在使用第一个示例中显示的方法简单定义表单时使用它。它们中的任何一个都会有任何好处/缺点吗?
答案 0 :(得分:0)
在__init__
方法中执行此操作允许根据表单内容修改帮助程序(显示/隐藏按钮),直到呈现为止。
为了保持灵活性并减少帮助者的计算,我把它放在属性属性中。
这使我也可以为儿童表格提供自然独立的帮助。
在使用静态助手处理单个表单的简单情况下,您的方法很棒。否则,它可能是危险的。
我使用具有给定属性的mixin,这让我感觉更像是一个扩展形式的api:
class MyFormMixin
@property
def helper(self):
helper = FormHelper()
if hasattr(self, "parent_url"):
back = layout.Button('back', 'Return button text')
back.field_classes += ' primaryAction'
helper.add_input(back)
reset = layout.Reset('reset', 'undo')
reset.field_classes += ' primaryAction'
helper.add_input(reset)
submit = layout.Submit('submit', 'Valider (here in french)')
submit.field_classes += ' primaryAction'
helper.add_input(submit)
helper.form_method = 'POST'
if hasattr(self, "action_url"):
helper.form_action = self.action_url
if hasattr(self, "form_style"):
helper.form_style = self.form_style
if hasattr(self, "form_layout"):
fs=[]
for name, fields in self.form_layout.iteritems():
fs.append(layout.Fieldset(name, *fields))
helper.add_layout(layout.Layout(*fs))
else:
helper.add_layout(layout.Layout(layout.Fieldset("",*self.fields.keys())))
return helper
设置self.helper的__init__
方法也可以完成这项工作。 (但有时我使用表单进行简单验证而不进行渲染,我将其设置在属性中。)
希望这有帮助