Tengo una lista de tuplas que se parece a la siguiente:

answer_guess_list = [('A',), ('B', 'C',), ('A', 'B', 'C', 'D',)]

En mis plantillas, tengo una variable de plantilla con el mismo nombre.

{% for guess_list in answer_guess_list %}

        <p>
            {% for guess_value in guess_list %}
                {{ guess_value }}, # Notice the comma (,)
            {% endfor %}
        </p>

{% empty %}
    <p>Nothing to show.</p>
{% endfor %}

Muestra la lista de la siguiente manera:

A,
B, C, 
A, B, C, D,

No quiero las comas del terminal y prefiero mostrarlo como:

A
B, C
A, B, C, D

No sé cómo lograr eso. ¿Podrías ayudar por favor?

1
inquilabee 4 mar. 2018 a las 02:19

3 respuestas

La mejor respuesta

Esta sería una forma de hacerlo:

{% for guess_list in answer_guess_list %}
    <p>
        {% for guess_value in guess_list %}
            {{ guess_value }}{% if forloop.counter < guess_list|length %}, {% endif %}
        {% endfor %}
    </p>
{% empty %}
    <p>Nothing to show.</p>
{% endfor %}

O también puede usar el filtro de plantilla incorporado join :

{% for guess_list in answer_guess_list %}
    <p>
        {{ guess_list|join:", " }}
    </p>
{% empty %}
    <p>Nothing to show.</p>
{% endfor %}
1
bonidjukic 3 mar. 2018 a las 23:53

Hay una opción integrada para esto en for templatetag llamado foorloop.last. Simplemente cambie su código a esto:

{% for guess_list in answer_guess_list %}
<p>
    {% for guess_value in guess_list %}
        {{ guess_value }}{% if not forloop.last %},{% endif %}
    {% endfor %}
</p>
{% empty %}
<p>Nothing to show.</p>
{% endfor %}

Y si for loop es el último, la coma final no se representará.

0
Borut 3 mar. 2018 a las 23:50

Aquí se encuentra la documentación para las etiquetas de plantilla, las siguientes es la etiqueta de sí mismo.

@register.filter(name="my_filter")
def fltr(tpl):
    return ','.join([str(i) for i in tpl])

Después de registrar esta etiqueta siguiendo las instrucciones en los documentos, puede usarla como:

    <p>
        {% for guess_value in guess_list %}
            {{ guess_value|my_filter }},
        {% endfor %}
    </p>
0
Işık Kaplan 3 mar. 2018 a las 23:27