Шаблон Django не может получить доступ к полю формы, если оно находится внутри массива - PullRequest
0 голосов
/ 15 декабря 2010

Довольно плохо знаком с Django здесь, так что я не знаю, получаю ли я это просто или это ошибка. Допустим, у меня есть класс формы:

class SurveyTwo(forms.Form):  
  food = [forms.BooleanField(required=False, initial=False, label="Seafood")]

Затем в соответствующем шаблоне я пытаюсь получить доступ к этому, набрав

{{ form.food.0 }}

Когда я это делаю, я попадаю на мою страницу:

<django.forms.fields.BooleanField object at 0x1c5b990>

Не тот флажок "Морепродукты", который я искал. Я могу получить доступ к метке очень хорошо, выполнив {{form.food.0.label}}, но флажок просто отображается как эта строка. Должен ли я быть в состоянии сделать это или нет?

По сути, я пытаюсь передать массив флажков в шаблон формы, а не определять каждую переменную / поле формы. Я хочу сделать это, потому что у меня будет большое количество флажков и я хочу иметь возможность размещать их в определенном порядке (с двумерным массивом), а не определять их и раскладывать их вручную. Если я не могу сделать выше, кто-нибудь знает более простое решение? Спасибо.

Mark

1 Ответ

1 голос
/ 25 августа 2011

Вы можете зарегистрировать простой тег шаблона:

from django import template
register = template.Library()

@register.simple_tag
def bound_field(form, name):
    """ returns bound field """
    return form.__getitem__(name)

Тогда в шаблоне вы просто используете:

{% bound_field form <field_name> %}

где имя поля. Если у вас есть динамически генерируемые поля, имена которых вы не знаете, вы можете получить к ним доступ через fields.keys, в этом случае генерация всех полей будет выглядеть как

{% for name in form.fields.keys %}
    {% bound_field form name %}
{% endfor %}
...