Jeśli mam listę users
powiedz ["Sam", "Bob", "Joe"]
, chcę zrobić coś, co mogę wyprowadzić w moim pliku szablonu jinja:
{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
Chcę, aby szablon wyjściowy był:
Sam, Bob, Joe
Wypróbowałem powyższy kod, aby sprawdzić, czy był na ostatniej iteracji pętli, a jeśli nie, to nie wstawiaj przecinka, ale nie działa. Jak mam to zrobic?
!
jako operatora negacji. „nie” jest zapisywane jako „nie”.Odpowiedzi:
Chcesz, aby Twój
if
czek był:Zwróć uwagę, że możesz również skrócić kod, używając wyrażenia If :
źródło
{{ "," if not forloop.last }}
{{ "," if not loop.last else "" }}
możesz także użyć wbudowanego filtru „dołącz” ( http://jinja.pocoo.org/docs/templates/#join w następujący sposób:
źródło
ansible -i localhost, all -m debug -a "msg=\"{{ [ 'a','b','c' ]|join('X') }}\""
I korzystając
joiner
z http://jinja.pocoo.org/docs/dev/templates/#joinerJest stworzony do tego właśnie celu. Normalnie złączenie lub sprawdzenie forloop.last wystarczyłoby dla pojedynczej listy, ale dla wielu grup rzeczy jest to przydatne.
Bardziej złożony przykład, dlaczego chcesz go używać.
źródło
Poniższy kod działał przy użyciu filtru złączania jinja2, sugerowanego przez Uli Martensa w powłoce python3.5:
źródło