Я пытаюсь добиться следующей работы.
Цикл счетчика должен проходить через все значения, и может не быть пользователя, связанного с каждым счетчиком, но значение счетчика 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' вместо имени переменной.
Я буду пробовать это так долго.
* Править
Это не сработало.
Фильтр работал с использованием {{}}
, возвращая объект, но не работал внутри {%%}
.
Спасибо за информацию