【发布时间】:2013-07-21 01:30:08
【问题描述】:
我们有一个清晰的表单,我们希望能够在表单HTML 模板的不同部分呈现不同的字段,但是我们在Crispy Documentation 中找不到这样做的方法。下面是一些稍微编造的代码来说明我们正在尝试做的事情:
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')
)
)
template.html
<body>
{% crispy form layout_1 %}
<!-- A big bunch of other html -->
{% crispy form layout_2 %}
</body>
有人知道实现这一目标的干净方法吗?
到目前为止我们已经研究过并且不得不排除的方法:
- 我们可以在 HTML 中手动添加字段,而不是让脆皮为我们呈现它们。但是,这似乎是不可能的,因为我们有许多
choice字段,其选项是通过编程方式确定的。 - 我们可以编写一个清晰的布局,它使用一个
crispy.forms.layout.HTML对象来包含分割我们布局的两个不同部分的HTML。但是,有很多 HTML,如果我们将其直接嵌入到 python 中,将变得难以维护。 - 我们可以写一个Custom Layout Object 来为我们做这件事,但我们预计这会涉及很多,并希望考虑这是最后的手段。
- 我们不能不使用脆皮,而是寻找脆皮之外的方法来实现这一点,但这样我们就会失去与应用程序中所有其他形式的一致性。
【问题讨论】:
-
这是您正在使用的
ModelForm吗? -
不,这只是香草
django.forms.Form -
那么,crispy 是否将所有字段渲染两次,而不仅仅是您在每个布局中指定的字段?我没有看到您当前的解决方案有什么问题。
-
我们在布局的不同部分渲染不同的字段。上面的代码实际上并没有工作——这更多是为了说明我们想要尝试和做的事情(如果不够清楚,请道歉)
标签: python django layout django-forms django-crispy-forms