是否可以单独呈现每个复选框,而不是必须在列表中将所有复选框聚集在一起,就像默认情况下那样?像
这样的东西{{ myform.cbmultiple.0 }}
只渲染第一个复选框?实际上0
必须是一个变量,所以我可以循环...
我问的原因是因为我想以相当复杂的方式显示这些复选框,所以默认小部件对我不起作用。我也不是真的想要覆盖小部件,因为使用模板语法比使用python代码更容易渲染它,而且,这对于一次性来说是很多工作。
答案 0 :(得分:3)
不,你不能这样做,因为整个HTML是由widget's render
method一次生成的。您只能创建自己的窗口小部件类并覆盖render
方法,以便它以适合您目的的方式生成HTML!
答案 1 :(得分:2)
有一种方法可以在模板中手动渲染CheckboxSelectMultiple(),这样你就可以用它做你想做的事。
请查看this post了解详情。
解决方案可能是这样的:
<table>
<thead>
<tr>
<td> </td>
<td>V</td>
<td>S</td>
</tr>
</thead>
{% for pk, choice in form.options.field.widget.choices %}
<tr>
<td><a href="/link/{{ choice }}">{{ choice }}</a></td>
<td><label for="id_options_{{ forloop.counter0 }}"><input {% for option in app.options.all %}{% if option.pk == pk %}checked="checked"{% endif %}{% endfor %} type="checkbox" id="id_options_{{ forloop.counter0 }}" value="{{ pk }}" name="options" /></label></td>
</tr>
{% endfor %}
</table>