rob*_*cox 12 python django layout django-forms django-crispy-forms
我们有一个脆弱的形式,我们希望能够在表单HTML模板的不同部分呈现不同的字段,但是我们在Crispy文档中找不到这样做的方法.下面是一些稍微简化的代码,用于说明我们要做的事情:
forms.py
helper = FormHelper()
helper.layout_1 = Layout(
Div(
Field('field_1a'),
Field('field_1b')
)
)
helper.layout_2 = Layout(
Div(
Field('field_2a'),
Field('field_2b')
)
)
Run Code Online (Sandbox Code Playgroud)
template.html
<body>
{% crispy form layout_1 %}
<!-- A big bunch of other html -->
{% crispy form layout_2 %}
</body>
Run Code Online (Sandbox Code Playgroud)
有谁知道实现这一目标的干净方法?
到目前为止我们已经看过的方法必须排除:
choice字段,其选项以编程方式确定.crispy.forms.layout.HTML对象来包含HTML,它将我们布局的两个不同部分分开.但是,有很多HTML,如果我们将它直接嵌入到python中,将很难维护.Sco*_*all 15
更新:这不起作用 forms.ModelForm
尝试创建两个帮助程序而不是两个布局,然后显式调用单独的帮助程序.这样做你必须手动编写<form>标签以将两个表格都包含在你的模板中,但希望能提供你需要的解决方案.
forms.py
class Form(forms.Form):
field_1a = forms.CharField()
field_1b = forms.CharField()
field_2a = forms.CharField()
field_2b = forms.CharField()
def __init__(self, *args, **kwargs):
super(Form, self).__init__(*args, **kwargs)
helper1 = FormHelper()
helper1.form_tag = False
helper1.layout = Layout(
Div(
Field('field_1a'),
Field('field_1b')
)
)
helper2 = FormHelper()
helper2.form_tag = False
helper2.disable_csrf = True
helper2.layout = Layout(
Div(
Field('field_2a'),
Field('field_2b')
)
)
Run Code Online (Sandbox Code Playgroud)
然后在你的模板中:
<body>
<form>
{% crispy form form.helper1 %}
<!-- A big bunch of other html -->
{% crispy form form.helper2 %}
</form>
</body>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5511 次 |
| 最近记录: |