刚刚把我的Django应用从3.2版升级到4.1版。
当我现在呈现一个有多个选择的表单时,它将每个项呈现为div而不是li。
示例代码如下:
from django import forms
CHOICES = []
for i in range(1, 20):
CHOICES.append((str(i),str(i)))
class ChoicesForm(forms.Form):
choices = forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple(), choices=CHOICES)
form = ChoicesForm()
print(form)
打印(表单)的输出(缩短)为
<tr>
<th><label>Choices:</label></th>
<td>
<div id="id_choices"><div>
<label for="id_choices_0"><input type="checkbox" name="choices" value="1" id="id_choices_0">
1</label>
</div><div>
<label for="id_choices_1"><input type="checkbox" name="choices" value="2" id="id_choices_1">
2</label>
</div><div>
<label for="id_choices_2"><input type="checkbox" name="choices" value="3" id="id_choices_2">
3</label>
</div><div>
<label for="id_choices_3"><input type="checkbox" name="choices" value="4" id="id_choices_3">
4</label>
但是我在之前的代码中得到的是
<tr><th><label>Choices:</label></th><td><ul id="id_choices">
<li><label for="id_choices_0"><input type="checkbox" name="choices" value="1" id="id_choices_0">
1</label>
</li>
<li><label for="id_choices_1"><input type="checkbox" name="choices" value="2" id="id_choices_1">
2</label>
</li>
<li><label for="id_choices_2"><input type="checkbox" name="choices" value="3" id="id_choices_2">
3</label>
</li>
<li><label for="id_choices_3"><input type="checkbox" name="choices" value="4" id="id_choices_3">
4</label>
我找不到任何关于为什么要改变的参考资料。我也不知道如何将表单输出创建为列表而不
这是预期的,还是我错过了什么?
我最终想要实现的是将输出格式化为项目的行,而不是div创建的列。
1条答案
按热度按时间sqyvllje1#
在Django文档中找到了一个解释为什么会发生这种情况的参考。这是CheckboxSelectMultiple()自版本4以来的一个变化。请参见https://docs.djangoproject.com/en/4.1/ref/forms/widgets/#checkboxselectmultiple。有一个关于如何循环各个复选框的解释,所以我想我可以做到这一点。将需要查看HTML,看看是否有一种方法可以使div语句水平呈现而不是垂直呈现。