programing

python jinja 템플릿에서 loop.counter를 출력하는 방법

goodjava 2023. 1. 24. 08:11

python jinja 템플릿에서 loop.counter를 출력하는 방법

현재의 루프 반복을 템플릿에 출력할 수 있도록 하고 싶다.

의사들에 의하면,loop.counter사용하려는 변수:

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{loop.counter}}
  </li>
      {% if loop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>

하지만 내 템플릿으로 출력되고 있다.올바른 구문은 무엇입니까?

루프 내부의 카운터 변수를 호출합니다.loop.indexJinja2에서.

>>> from jinja2 import Template

>>> s = "{% for element in elements %}{{loop.index}} {% endfor %}"
>>> Template(s).render(elements=["a", "b", "c", "d"])
1 2 3 4

에 더하여loop.index, 또한

  • loop.index0(인덱스 시작:0)
  • loop.revindex(인덱스, 종료시)1)
  • loop.revindex0(인덱스, 종료시)0)
  • 자세한 것은, http://jinja.pocoo.org/docs/templates/ 를 참조해 주세요.

의 내부for-루프 블록은 다음과 같은 특정 변수에 액세스할 수 있습니다.loop.index(단, 아닙니다)loop.counter) 공식 문서:

변수 묘사
loop.index 루프의 현재 반복입니다. (인덱스된 1 。
loop.index0 루프의 현재 반복입니다.(0 인덱스)
loop.revindex 루프 끝에서 반복 횟수(1개의 색인화)
loop.revindex0 루프 끝에서 반복 횟수(0 인덱스)
loop.first 첫 번째 반복일 경우 True입니다.
loop.last 마지막 반복일 경우 True입니다.
loop.length 시퀀스의 항목 수.
loop.cycle 시퀀스 목록 사이를 순환하는 도우미 함수입니다.
loop.depth 현재 렌더링이 재귀 루프에서 얼마나 깊은지 나타냅니다.레벨 1부터 시작
loop.depth0 현재 렌더링이 재귀 루프에서 얼마나 깊은지 나타냅니다.레벨 0부터 시작
loop.previtem 루프의 이전 반복 항목입니다.첫 번째 반복 중에 정의되지 않았습니다.
loop.nextitem 루프의 다음 반복 항목입니다.마지막 반복 중에 정의되지 않았습니다.
loop.changed(*val) 이전에 다른 값으로 호출된 경우(또는 전혀 호출되지 않은 경우) True입니다.

장고를 사용하는 경우forloop.counter대신loop.counter:

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{forloop.counter}}
  </li>
      {% if forloop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>

실제 예:

{% for image in item['images'] %}
    {% set image_id = item_id ~ '-preview-' ~ loop.index0 %}
    <div id="{{ image_id }}" class="overlay">
        <a class="cancel" href="#{{ item_id }}"></a>
        <div class="popup">
            {% set src = image if image.startswith('http') else '/static/images/store/' ~ item_id ~ '/' ~ image %}
            <a href="{{ src }}"><img class="modal-img" src="{{ src }}"/></a>
        </div>
    </div>
{% endfor %}

Python 코드:

env = Environment(loader=FileSystemLoader("templates"))
env.globals["enumerate"] = enumerate

템플릿:

{% for idx, val in enumerate(list) %}
    {{ idx }}. {{val}}
{% endfor %}

언급URL : https://stackoverflow.com/questions/12145434/how-to-output-loop-counter-in-python-jinja-template