You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Crispy Forms动态添加formset时CSS不匹配及多余form标签问题

根因分析

使用{% crispy %}模板标签渲染单个表单实例时,Crispy Forms的FormHelper默认会自动生成完整的<form>包裹标签,这就是出现额外form标签的来源。而|crispy模板过滤器不会读取你在FormHelper中自定义的Layout布局配置,只会渲染默认样式的表单字段,因此无法匹配原有样式。

解决方案

第一步:修改FormHelper配置

在RecipeIngredientForm的__init__方法中,新增两个FormHelper属性,关闭自动生成form标签和csrf token的逻辑:

def __init__(self, *args, **kwargs):
    super(RecipeIngredientForm, self).__init__(*args, **kwargs)
    self.helper = FormHelper()
    # 新增以下两行配置
    self.helper.form_tag = False  # 关闭自动生成form标签
    self.helper.disable_csrf = True  # 关闭自动生成csrf输入框,外层表单已全局配置
    # 原有配置保持不变
    self.helper.form_id = 'id-entryform'
    self.helper.form_class = 'form-inline'
    self.helper.layout = Layout(
        Div(
            Div(Field("name", placeholder="Chickpeas"), css_class='col-6 col-lg-4'),
            Div(Field("quantity", placeholder="2 x 400"), css_class='col-6 col-md-4'),
            Div(Field("unit", placeholder="grams"), css_class='col-5 col-md-4'),
            Div(Field("description", placeholder="No added salt tins"), css_class='col-12'),
        css_class="row",
       ),
    )

第二步:保持现有模板配置不变

不需要修改模板中原有的{% crispy ingredient %}和{% crispy formset.empty_form %}写法,即可同时满足两个需求:

  • 不再生成多余的<form>嵌套标签
  • 所有原有表单和动态新增的表单都保留你自定义的Layout布局和CSS样式

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:57:00