He impreso un bucle for como se muestra a continuación en mi plantilla HTML:
<td> {% for athlete in booking.athlete.all %} {{athletes.id}} {% endfor %} </td>La salida en HTML es la siguiente.
<td> 1 2 3 </td>¿Es posible hacer que la salida aparezca como [ "1", "2", "3" ], para que luego podamos usar esto como una matriz u objeto JS?
Probé algunas cosas de la Plantilla Django pero no elimina el espacio en blanco adicional.
La forma más fácil es probablemente usar una etiqueta de plantilla personalizada para obtener la lista de athlete.ids , y luego el filtro json_script para representar esas identificaciones como json.
Supongamos que el nombre de su aplicación es myapp . Si aún no tiene ningún filtro personalizado, cree el directorio myapp/templatetags/ y agregue un archivo __init__.py vacío. Luego, en el archivo myapp/templatetags/myapp_filters.py agregue:
from django import template register = template.Library() @register.filter def qs_to_id_list(qs): return list(qs.values_list('id', flat=True))En su ejemplo de plantilla, haría:
{% load myapp_filters %} {% for booking in bookings %} <tr> <td>{{booking.id}}</td> <td>{{booking.program_type}}</td> <td>{{booking.booking_time}}</td> {# set a unique script id for easier access in javascript #} {% with script_id='athletes-data-'|add:booking.id %} {{booking.athlete.all|qs_to_id_list|json_script:script_id}} {% endwith %} </tr> {% endfor %} El filtro json_script generará un bloque como este (en cada fila de la tabla):
<script id="athletes-data-5" type="application/json">[1, 2, 3]</script>al que se puede acceder en su javascript del lado del cliente.