gpt4 book ai didi

python - Django Crispy 表单拆分字段布局

转载 作者:太空狗 更新时间:2023-10-29 17:44:54 28 4
gpt4 key购买 nike

我们有一个清晰的表单,我们希望能够在表单 HTML 模板的不同部分呈现不同的字段,但是我们无法在 Crispy Documentation 中找到执行此操作的方法。 .下面是一些稍微编造的代码来说明我们正在尝试做的事情:

表单.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 中手动添加字段,而不是让 crispy 为我们呈现它们。但是,这看起来行不通,因为我们有许多 choice 字段,其选项是通过编程方式确定的。
  • 我们可以编写一个清晰的布局,它使用 crispy.forms.layout.HTML 对象来包含将布局的两个不同部分分开的 HTML。然而,有很多HTML,如果我们将其直接嵌入到python中,将变得难以维护。
  • 我们可以写一个Custom Layout Object为我们做这件事,但我们预计这会涉及很多,并希望将其视为最后的手段。
  • 我们可以不使用 crispy,而是寻找 crispy 以外的方法来实现这一点,但这样我们就会失去与应用程序中所有其他形式的一致性。

最佳答案

更新:这不适用于 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)
self.helper1 = FormHelper()
self.helper1.form_tag = False
self.helper1.layout = Layout(
Div(
Field('field_1a'),
Field('field_1b')
)
)

self.helper2 = FormHelper()
self.helper2.form_tag = False
self.helper2.disable_csrf = True
self.helper2.layout = Layout(
Div(
Field('field_2a'),
Field('field_2b')
)
)

然后在你的模板中:

<body>
<form>
{% crispy form form.helper1 %}
<!-- A big bunch of other html -->
{% crispy form form.helper2 %}
</form>
</body>

关于python - Django Crispy 表单拆分字段布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17785451/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com