Отображение дополнительных данных во время перебора набора форм Django - PullRequest
4 голосов
/ 06 июня 2010

У меня есть список футбольных матчей, для которых я хотел бы отображать формы. Список поступает из удаленного источника.

matches = ["A vs. B", "C vs. D", "E vs, F"]
matchFormset = formset_factory(MatchForm,extra=len(matches))
formset = MatchFormset()

На стороне шаблона я хотел бы отобразить набор форм с соответствующим заголовком (т. Е. "A против B").

{% for form in formset.forms %}
    <fieldset>
        <legend>{{TITLE}}</legend>
        {{form.team1}} : {{form.team2}}
    </fieldset>
{% endfor %}

Теперь, как мне заставить TITLE содержать правильный заголовок для текущей формы? Или спросили по-другому: как мне выполнить итерацию по matches с тем же индексом, что и итерация по formset.forms?

Спасибо за ваш вклад!

Ответы [ 2 ]

6 голосов
/ 07 июня 2010

Я считаю, что в языке шаблонов Django нет встроенного фильтра для индексации, но есть один для нарезки (slice) - и поэтому я думаю, что в крайнем случае вы могли бы использовать 1- срез элемента (с forloop.counter0:forloop.counter) и .first для извлечения нужного значения.

Конечно, было бы легче сделать это при некотором сотрудничестве со стороны Python - вы могли бы просто иметь переменную контекста forms_and_matches, установленную на zip(formset.forms, matches) в коде Python и, в шаблоне, {% for form, match in forms_and_matches %} просто и легко прочитать оба пункта (конечно, если принять Django 1.0 или выше в этом ответе).

2 голосов
/ 27 октября 2011

Это дополнение к ответу Алекса.

Я прочитал после моего комментария ответа Алекса и обнаружил, что важно вставить форму управления (в основном мета-форму с информацией о количестве форм в наборе форм) в ваш шаблон, чтобы ваши отправленные данные были рассматривается как форма, а не просто куча форм. Документация здесь .

Я знаю только два способа вставить это в ваш шаблон:

  1. Отправьте набор форм в дополнение к любой структуре данных, которую вы сделали, и затем визуализируйте форму управления с помощью {{my_formset.management_form}}
  2. Отобразите форму управления в своем представлении и отправьте ее как элемент в шаблон

Конечно, если вы используете первый метод Алекса, набор форм уже доступен, так что вы можете напрямую добавить форму управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...