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
相关产品推荐
相关产品推荐

