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

Django 3.2升级4.1后多选表单渲染由<li>变为<div>的问题

Django 3.2 → 4.1: CheckboxSelectMultiple 渲染结构变更问题

该变更是否符合预期?

是,这是Django 4.0版本引入的官方预期改动:为提升样式灵活性,CheckboxSelectMultiple组件的默认渲染结构从<ul>包裹<li>的列表形式,改为外层<div>包裹单个选项<div>的结构。

恢复
    /
  • 列表形式的方法

通过指定widget使用旧版本的模板文件即可恢复原有结构:

from django import forms

CHOICES = [(str(i), str(i)) for i in range(1, 20)]

class ChoicesForm(forms.Form):
    choices = forms.MultipleChoiceField(
        required=False,
        widget=forms.CheckboxSelectMultiple(
            template_name='django/forms/widgets/checkbox_select.html'
        ),
        choices=CHOICES
    )

checkbox_select.html是Django 3.2及更早版本中CheckboxSelectMultiple的默认模板,会生成<ul>和<li>的列表结构。

实现选项横向排列的最优方案

若你的核心需求是让选项横向排列,无需恢复列表结构,直接通过CSS即可实现:

#id_choices {
    display: flex;
    flex-wrap: wrap;
    gap: 1.5rem; /* 自定义选项间距 */
}

#id_choices > div {
    display: inline-flex;
    align-items: center;
}

这种纯CSS方案无需修改后端代码,适配新版本的渲染结构,同时能灵活控制排列样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:32:55