【问题标题】:Displaying multiple Rows and Columns in django-crispy-forms在 django-crispy-forms 中显示多行和多列
【发布时间】:2012-08-22 02:07:10
【问题描述】:

我将 django-crispy-forms 与 Twitter Bootstrap 一起使用,并且在将表单自定义为多行和多列时遇到了一些问题。一个示例问题是,当我尝试将表单分成两列时没有任何反应:

class SomeForm(ModelForm):

    helper = FormHelper()
    helper.layout = Layout(
        Column('field1', 'field3'),
        Column('field2', 'field4'),
        )
    )

    class Meta:
        model = Model

查看 html 输出,我看到有 <div class="formColumn">,但表单显示在一列中。也许这是一个CSS问题?我正在使用 Bootstrap 2.1。

【问题讨论】:

    标签: django twitter-bootstrap django-crispy-forms


    【解决方案1】:

    谢谢maraujo。

    我已经使用 div 标签和引导文档实现了这一点:http://twitter.github.com/bootstrap/scaffolding.html

    class SomeForm(ModelForm):
    
        helper = FormHelper()
        helper.layout = Layout(
            Div(
                Div('field1', css_class='span6'),
                Div('field3', css_class='span6'),  
            css_class='row-fluid'), 
        )
    
        class Meta:
            model = Model
    

    对于 bootstrap3,将 span6 替换为 col-xs-6 http://getbootstrap.com/css/#grid

    【讨论】:

    • 很好,我会在文档中为其他人写下来,这是一个很好的做法。
    • @maraujop 如果我想要一个实际的 我应该覆盖哪个模板?我好像没找到。
    • Crispy 不做表格布局,你也不应该。 HTML 表格布局已被弃用至少十年了。
    • 对于 bootstrap3 也将 'row-fluid' 替换为 'row'
    • 对于 bootstrap4,请参阅下面的@pepjin 答案
    【解决方案2】:

    ma​​rtinpaulucci 的 2018 年小幅更新:

    对于 Bootstrap 4 和最新的 django-crispy-forms 1.7.2 使用:

    class SomeForm(ModelForm):
    
        helper = FormHelper()
        helper.layout = Layout(
            Div(
                Field('field1', wrapper_class='col-md-3'),
                Field('field3', wrapper_class='col-md-9'),  
            css_class='form-row') 
        )
    
        class Meta:
            model = Model
    

    使用 Field 标签代替 Div 标签避免了另一个不必要的包装 div。为了改进这一点,如果您要使用不止一行,您可以用自己的替换脆形式行:

    class Row(Div):
        css_class = "form-row"
    

    然后使用:

    class SomeForm(ModelForm):
    
        helper = FormHelper()
        helper.layout = Layout(
            Row(
                Field('field1', wrapper_class='col-md-3'),
                Field('field3', wrapper_class='col-md-9')  
            ) 
        )
    
        class Meta:
            model = Model
    

    【讨论】:

    • 覆盖的行类去哪里了?
    • 您可以将它放在表单类之前的某个文件中。
    【解决方案3】:

    Django3 + ModelForm 在同一行显示多个字段时遇到问题

    def __init__(self, *args, **kwargs):
        super(SupplierDetailForm, self).__init__(*args, **kwargs)
    
        self.helper = FormHelper(self)
        self.helper.layout = Layout(
            Row(
                Column('nom', css_class='form-group col-2 mb-0'),
                Column('email', css_class='form-group col-4 mb-0'),
            )
        )
    

    我注意到 Crispy "row" 类实际上是一个与 Bootstrap 4 类不匹配的 "form-row" 类。

    Pepijn 的 提示完成了这项工作。谢谢

    【讨论】:

    猜你喜欢
    • 2019-07-14
    • 2015-02-19
    • 1970-01-01
    • 2018-06-17
    • 2017-02-02
    • 2019-07-31
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多