Использовать переменную цикла как ключ словаря в шаблоне Django

Я пытаюсь добиться следующей работы.

Цикл счетчика должен проходить через все значения, и может не быть пользователя, связанного с каждым счетчиком, но значение счетчика i должно использоваться в каждом цикле для перехода к JavaScript.

часть Python:

users = {}
users[1]={}
users[1][id]=...
users[1][email]=...

...

count=[1,2,3,4,5,6,7,8,9,10]

Часть шаблона Django:

{% for i in count %}
do some stuff with the value i using {{i}} which always returns the value, i.e. 1

email:{% if users.i.email %}'{{users.i.email}}'{% else %}null{% endif%}
{% endfor %}

Это ничего не возвращает для электронной почты. Когда я заменяю число 1 на i в ] {% if user.i.email%} email возвращает адрес электронной почты пользователя. Я использую данные в JavaScript, поэтому он должен быть неявно нулевым, если он не существует. { {1}} Я не могу заставить Django распознавать переменную i как переменную вместо значения i.

с использованием [] не работает, так как выдает неверную синтаксическую ошибку

email:{% if users.[i].email %}'{{users.[i].email}}'{% else %}null{% endif%}

Я пробовал использовать оператор « с »

{% for i in count %}{% with current_user=users.i %}...

, а затем использовать current_user.email ], но ничего не вернул

Также попробовали

{% for i in count %}{% with j=i.value %}...

на случай, если это сработает, а затем попытались использовать j , но результат тот же.

Я думал о создании внутреннего цикла for, который перебирает пользовательский объект и проверяет, равно ли i ключу / значению, но это кажется дорогостоящим и не очень масштабируемым.

Есть идеи, как я могу заставить Django рассматривать i как переменную и использовать ее значение в качестве индекса, или как-то иначе обойти это?

Спасибо

Jayd

* Редактировать:

Я попробовал дополнительный цикл for, предложенный Абхи ниже.

{% for i in count %}
  {% for key, current_user in users.items %}
      do some stuff with the value i using {{i}} which always returns the value, i.e. 1
      email:{% if i == key and current_user.email %}'{{current_user.email}}'{% else %}null{% endif%}
  {% endfor %}
{% endfor %}

Такого рода работает, но теперь он будет повторяться , делать некоторые вещи со значением i для каждого значения пользователей. и если я добавлю if:

{% for i in count %}
  {% for key, current_user in users.items %}
    {% if i == key %}
      do some stuff with the value i using {{i}} which always returns the value, i.e. 1
      email:{% if i == key and current_user.email %}'{{current_user.email}}'{% else %}null{% endif%}
    {% endif%}
  {% endfor %}
{% endfor %}

Это игнорирует циклы, когда счетчик не имеет конкретного пользователя.

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

{% for i in count %}
      do some stuff with the value i using {{i}} which always returns the value, i.e. 1
      email:{% for key, current_user in users.items %}{% if i == key and current_user.email %}'{{current_user.email}}'{% else %}null{% endif%}{% endfor %}
{% endfor %}

И это кажется очень дорогостоящим. Есть идеи?

Я думал, может быть, написать фильтр, который возвращает значения для пользователей, использующих i в качестве ключа:

{% with current_user=users|getuser:i %}

Но я не знаю, сработает ли это, или я получу ту же ошибку, где i передается как значение 'i' вместо имени переменной.

Я буду пробовать это так долго.

* Править

Это не сработало. Фильтр работал с использованием {{}} , возвращая объект, но не работал внутри {%%} .

Спасибо за информацию

5
задан Jayd 27 September 2011 в 10:56
поделиться