我试图创建一个表单布局与几个领域是一个不同的大小比其他领域。什么是最好的方式来做到这一点使用脆的形式?例如,我将表单按行进行布局,大多数行都有两个字段,但偶尔会有一个字段占据整行。
--------------------------------------------------
| First Name | Last Name |
--------------------------------------------------
| User Name | Email |
--------------------------------------------------
| Bio |
--------------------------------------------------
在上面的示例布局中,每个字段都由一个标签和实际HTML中的文本输入组成(我只是不知道如何在问题中显示)。我使用Bootstrap 3,所以在前两行,我希望标签有一个'col-sm-2'的类,输入字段有一个'col-sm-4'的类,这样当渲染时,它们每行显示两个字段(即12列)。但是,对于第三行的“Bio”字段,我希望输入字段为“col-sm-10”以占据整行。
下面是一些示例代码,这些代码足够接近,有人可能能够提供帮助。
self.helper = FormHelper(self)
self.helper.form_tag = False
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-sm-2'
self.helper.field_class = 'col-sm-4'
self.helper.layout = Layout(
MultiField(
'Profile Information',
Div('first_name', 'last_name'),
Div(css_class='clearfix'),
Div('username', 'email'),
Div(css_class='clearfix'),
Div('bio', css_class='col-sm-10'),
),
)
我已经尝试使用Div、Field和Row的几种不同组合,并使用css_class和wrapper_class的组合,以及尝试创建“自定义”属性,但没有任何效果可以给予我想要的布局。我甚至尝试了几种不同的嵌套Div(Field)类型结构的组合,但都不起作用。
似乎没有一种方法可以动态地更改helper.field_class中的“Bio”字段行。使用HTML方法似乎是错误的,但这就是我所能想到的。
什么是正确的方式来做到这一点使用脆的形式?
2条答案
按热度按时间nqwrtyyt1#
我有一个类似的函数(专为bootstrap 2设计),它可以让你完成一部分;它不能像你要求的那样处理水平表单,但是你可以生成动态行:
要获得与问题中的格式类似(但不完全相同)的格式,您可以这样做:
可能不是你的确切解决方案,它可能会帮助其他人偶然发现这个问题,至少(像我)。
ki0zmccv2#
问题
据我所知,这个问题没有简单的解决办法。
2014年,创建了关于为每个字段单独设置
label_class
的GitHub issue。但是,这个问题被crispy forms开发人员关闭为超出范围。在2021年,创建了一个GitHub pull request,其更改允许在单个字段上使用
label_class
和field_class
。但是,由于PR作者的不活动**,此PR已**关闭。可能的解决方案
this question中的答案可能会帮助您解决这个问题。一个可能的解决方案是创建一个自定义字段模板-参见this answer。