Django:CheckboxSelectMultiple

时间:2010-11-19 19:37:59

标签: django django-forms

是否可以单独呈现每个复选框,而不是必须在列表中将所有复选框聚集在一起,就像默认情况下那样?像

这样的东西
{{ myform.cbmultiple.0 }}

只渲染第一个复选框?实际上0必须是一个变量,所以我可以循环...

我问的原因是因为我想以相当复杂的方式显示这些复选框,所以默认小部件对我不起作用。我也不是真的想要覆盖小部件,因为使用模板语法比使用python代码更容易渲染它,而且,这对于一次性来说是很多工作。

2 个答案:

答案 0 :(得分:3)

不,你不能这样做,因为整个HTML是由widget's render method一次生成的。您只能创建自己的窗口小部件类并覆盖render方法,以便它以适合您目的的方式生成HTML!

答案 1 :(得分:2)

有一种方法可以在模板中手动渲染CheckboxSelectMultiple(),这样你就可以用它做你想做的事。

请查看this post了解详情。

解决方案可能是这样的:

<table>
<thead>
  <tr>
  <td>&nbsp;</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>