Estoy tratando de obtener el siguiente funcionamiento.Usar para variable de bucle como clave del diccionario en la plantilla de Django
El bucle de recuento debe recorrer todos los valores, y es posible que no haya un usuario asociado a cada recuento, pero el valor de recuento i
debe utilizarse en cada bucle para pasar al JavaScript.
parte pitón:
users = {}
users[1]={}
users[1][id]=...
users[1][email]=...
...
count=[1,2,3,4,5,6,7,8,9,10]
Django parte de plantilla:
{% 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 %}
Esto devuelve nada por correo electrónico. Cuando sustituyo el número 1
por i
en {% if user.i.email %}
, el correo electrónico devuelve la dirección de correo electrónico de los usuarios. Estoy usando los datos en JavaScript, por lo que debe ser implícitamente nulo si no existe. Parece que no logro que Django reconozca la variable i
como una variable en lugar del valor i.
usando []
no funciona, ya que genera un error de sintaxis no válida
email:{% if users.[i].email %}'{{users.[i].email}}'{% else %}null{% endif%}
He intentado usar "with
" declaración
{% for i in count %}{% with current_user=users.i %}...
y luego usando current_user.email
, pero regresó nada
También han intentado
{% for i in count %}{% with j=i.value %}...
en caso de que funcione, y luego intentar usar j
, pero el mismo resultado.
He pensado en crear un bucle for interno que pase por encima del objeto del usuario y compruebe si es igual a la clave/valor, pero parece caro y no muy escalable.
¿Alguna idea de cómo puedo forzar a Django a ver i
como una variable y usar su valor como índice, o de otra manera evitar esto?
Gracias
Jayd
* Editar:
He probado el extra para bucle, según lo sugerido por Abhi, a continuación.
{% 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 %}
Este tipo de obras, pero ahora se repetirá do some stuff with the value i
para cada valor de los usuarios. y si pongo en un caso:
{% 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 %}
que ignora los bucles cuando un recuento no tiene un usuario en particular.
La única forma que puedo ver a este respecto es tener el bucle de usuario en cada lugar que deseo usar 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 %}
Y esto parece muy costoso de hacer. Alguna idea?
Estaba pensando tal vez escribir un filtro que devuelve los valores para los usuarios que utilizan i
como la clave:
{% with current_user=users|getuser:i %}
Pero no sé si esto funcionará o que obtendrá el mismo error, en donde i
se pasa como el valor 'i' en lugar de un nombre de variable.
Lo intentaré tanto.
* Editar
Esto no funcionó. El filtro funcionó usando {{}}
devolviendo el objeto, pero no funcionó dentro de {% %}
.
Gracias por la entrada
¿Por qué utiliza un diccionario para la recogida externa en lugar de una lista? –
¿Por qué usaste el formato ** negrita ** a lo largo de esta pregunta, en lugar de seguir las instrucciones de formato claro a la derecha del cuadro de edición? –
Disculpas por el formateo, no vi las indicaciones cuando hice la publicación. – Jayd