代码之家  ›  专栏  ›  技术社区  ›  mpen

Django:复选框SelectMultiple

  •  4
  • mpen  · 技术社区  · 14 年前

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

    {{ myform.cbmultiple.0 }}
    

    只呈现第一个复选框?实际上 0 必须是一个变量才能循环。。。

    我问的原因是因为我想用一种相当复杂的方式显示这些复选框,所以默认的小部件对我不起作用。我也不想重写这个小部件,因为使用模板语法比在python代码中更容易呈现它,而且,这是一次性的大量工作。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Community dbr    7 年前

    有一种方法可以在模板中手动呈现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>
    
        2
  •  3
  •   Bernhard Vallant    14 年前

    不,您不能这样做,因为整个HTML是由 widget's render method 马上。您只能创建自己的widget类并重写 提供 方法,以便它以适合您的目的的方式生成HTML!