Синтаксис шаблона django для перебора двух списков - PullRequest
1 голос
/ 04 апреля 2011

У меня есть следующий шаблон django, в котором при переборе списка (class_list_overall) я хочу использовать forloop.counter0 в качестве индекса в другом списке (classTimeSlots). Это просто продолжает давать мне TemplateSyntaxError. Я пробовал следующие варианты:

  1. {{classTimeSlots.{{forloop.counter0}}}}
  2. {{classTimeSlots.[forloop.counter0]}}
  3. {{classTimeSlots.{forloop.counter0}}}
  4. {{classTimeSlots.(forloop.counter0)}}
  5. {{classTimeSlots.forloop.counter0}}
  6. {% with forloop.counter0 as index%} <legend>{{ classTimeSlots.index}}</legend> {% endwith %}

Ни один из которых не работал. Какие-либо предложения? Я просто новичок в DJango. Я использую Google App Engine.

Вот фрагмент кода (я знаю, что он неэффективен, но я пробовал разные вещи):

{% for class_list in class_list_overall %}
    <fieldset> <legend>{{ classTimeSlots.forloop.counter0 }}</legend>
        <ul>
            <li> <label>First Choice </label>
                <select class="dropdown" name="class{{forloop.counter}}1" size="1">
                    <option value="Click Here to Choose" selected="selected">Click Here to Choose</option>
                    {% for class in class_list %}
                        <option>{{class}}</option>
                    {% endfor %}
                </select>
            </li>
            <li> 
                <label>Second Choice </label>
                <select class="dropdown" name="class{{forloop.counter}}2" size="1">
                    <option value="Click Here to Choose" selected="selected">Click Here to Choose</option>
                    {% for class in class_list %}
                        <option>{{class}}</option>
                    {% endfor %}
                </select>
            </li>
        </ul>
    </fieldset>
{% endfor %}

Ответы [ 3 ]

2 голосов
/ 04 апреля 2011

Django не поддерживает это - оно намеренно ограничено. Вместо этого вы должны изменить функцию просмотра на zip два списка вместе и передать это в шаблон.

2 голосов
/ 04 апреля 2011

Краткий ответ: вы не можете этого сделать.

Язык шаблонов не будет пытаться определить значение переменной, переданной в точечном синтаксисе.

Будет выполнен буквальный поиск forloop.counter0

1: напишите тег шаблона, который принимает переменную и ключ, и вернет ему variable[key]

2: это наиболее вероятно может быть сделано в представлении.Могу ли я увидеть это?

0 голосов
/ 05 апреля 2011

Это возможно, но не рекомендуется:

{% for class_list in class_list_overall %}
<fieldset> <legend>
   {% for cts in classTimeSlots %}
    {% ifequal forloop.counter forloop.parentloop.counter %} {{cts}} 
    {% endifequal %} 
   {% endfor %} </legend>
    <ul>
        <li> <label>First Choice </label>
            <select class="dropdown" name="class{{forloop.counter}}1" size="1">
                <option value="Click Here to Choose" selected="selected">Click Here to Choose</option>
                {% for class in class_list %}
                    <option>{{class}}</option>
                {% endfor %}
            </select>
        </li>
        <li> 
            <label>Second Choice </label>
            <select class="dropdown" name="class{{forloop.counter}}2" size="1">
                <option value="Click Here to Choose" selected="selected">Click Here to Choose</option>
                {% for class in class_list %}
                    <option>{{class}}</option>
                {% endfor %}
            </select>
        </li>
    </ul>
</fieldset>{% endfor %}

Но лучше взять список в родительский dict:

[class_list_overall[i].update({'label':classTimeSlots[i]}) for i in range(0,len(classTimeSlots))]

И затем изменить код выше на:

<legend>
   {{ class_list.label }}
</legend>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...