Jinja: Podemos obter uma tag {% empty %}?

Criado em 2 dez. 2011  ·  5Comentários  ·  Fonte: pallets/jinja

O Django tem essa tag muito legal chamada {% empty %}, que permite fazer isso:

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

que é curto para

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

Desde que mudei para jinja, senti muita falta dessa tag :(

Comentários muito úteis

Isso já existe. Use {% else %} em um loop for. Infelizmente, tínhamos mais antes do Django criar vazio e renomeá-lo agora para corresponder à semântica do Django é meio estranho.

Todos 5 comentários

Isso já existe. Use {% else %} em um loop for. Infelizmente, tínhamos mais antes do Django criar vazio e renomeá-lo agora para corresponder à semântica do Django é meio estranho.

Oh, eu vejo. Talvez coloque uma nota disso em "Mudando de outros motores de modelo" na seção django?

Eu não vejo isso na documentação de comutação . É mencionado nas estruturas de controle : para documentação, mas seria útil tê-lo no documento de comutação...

Se list no código é um gerador e os blocos for e if funcionam da mesma maneira que em Python, a construção if-for não resolve o problema porque os geradores são sempre verdadeiros, além de tal construção ser menos idiomática que o bloco empty .

Não sei se você pode adicionar um sinalizador para verificar se o loop foi executado, verifique NameError: name 'item' is not defined ou adicione uma variável auxiliar a list(generator) no nível Jinja. Caso contrário, as únicas soluções são adicionar o bloco empty ou convencer os desenvolvedores de Python de que geradores vazios devem ser falsos (para evitar verificações feias manipulando StopIteration e "empurrando" o item pop).

O bloco else no Jinja já funciona como o bloco empty no Django. Nenhuma mudança é necessária aqui.

Esta página foi útil?
0 / 5 - 0 avaliações