2010-11-19 3 views
4

Можно ли отображать каждый флажок отдельно, вместо того, чтобы ему нужно скомпоновать все флажки вместе в списке, как это делается по умолчанию? Что-то вродеDjango: CheckboxSelectMultiple

{{ myform.cbmultiple.0 }} 

Чтобы сделать первый снимок? На самом деле 0 должен быть переменной, поэтому я могу зациклять ...

Причина, по которой я прошу, состоит в том, что я хочу отображать эти флажки довольно сложным образом, поэтому виджет по умолчанию не работает для меня , Я также не хочу переопределять виджет, потому что его гораздо проще отображать с помощью синтаксиса шаблона, чем в коде на языке python, плюс, это большая работа для одноразового использования.

ответ

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> 
3

Нет, вы не можете этого сделать, потому что весь HTML генерируется widget's render method сразу. Вы могли бы создать свой собственный класс виджетов и переопределить метод render, чтобы он создавал HTML в соответствии с вашей целью!

+1

Это ужасно: \ Я нахожу Django формы делают мою жизнь намного сложнее, не проще. Я думаю, что я бойкотирую проклятый виджет и сам сделаю его прямым HTML, вместо этого назову его «request.POST». – mpen

+0

Ну, вы правы, хотя это будет всего несколько строк питона. По-прежнему ужасно, что HTML находится внутри классов виджетов и не использует какой-либо шаблон! –

+0

Да ... это (отсутствие) разделения логики и представления, которые мне не нравятся. Я хочу, чтобы все вещи в одном месте, потому что я знаю, что я собираюсь подстроить внешний вид целую кучу. – mpen