Jinja: ¿Podemos obtener una etiqueta {% vacío %}?

Creado en 2 dic. 2011  ·  5Comentarios  ·  Fuente: pallets/jinja

Django tiene esta etiqueta genial llamada {% vacío %}, que te permite hacer esto:

{% for item in list %}
    <tr><td>{{ item }}</td></tr>
{% empty %}
    <tr><td>Nothing to show!</td></tr>
{% endfor %}

que es la abreviatura de

{% if list %}
    {% for item in list %}
        <tr><td>{{ item }}</td?</tr>
    {% endfor %}
{% else %}
    <tr><td>Nothing to show!</td></tr>
{% endif %}

Desde que cambié a jinja, realmente he extrañado esta etiqueta :(

Comentario más útil

Eso ya existe. Usa {% else %} en un bucle for. Desafortunadamente teníamos más antes de que Django se creara vacío y cambiarle el nombre ahora para que coincida con la semántica de Django es un poco raro.

Todos 5 comentarios

Eso ya existe. Usa {% else %} en un bucle for. Desafortunadamente teníamos más antes de que Django se creara vacío y cambiarle el nombre ahora para que coincida con la semántica de Django es un poco raro.

Oh ya veo. ¿Quizás poner una nota de eso en "Cambiar desde otros motores de plantilla" en la sección Django?

No veo esto en la documentación de conmutación . Se menciona en las estructuras de control : para la documentación, pero sería útil tenerlo en el documento de conmutación...

Si list en el código es un generador y los bloques for y if funcionan de la misma manera que en Python, entonces la construcción if-for no resuelve el problema porque los generadores siempre son veraces, además dicha construcción es menos idiomática que el bloque empty .

No sé si puede agregar una bandera para verificar si se ha ejecutado el bucle, verificar NameError: name 'item' is not defined o agregar una variable auxiliar a list(generator) en el nivel de Jinja. De lo contrario, las únicas soluciones son agregar el bloque empty o convencer a los desarrolladores de Python de que los generadores vacíos deberían ser falsos (para evitar comprobaciones feas mediante el manejo de StopIteration y el elemento reventado "rechazando").

El bloque else en Jinja ya funciona como el bloque empty en Django. Aquí no es necesario ningún cambio.

¿Fue útil esta página
0 / 5 - 0 calificaciones