Django slice переменная в шаблоне

Я пытаюсь разрезать список изображений, чтобы разделить их на несколько страниц pdf, который я создаю. Но я не уверен, какой синтаксис мне нужно использовать. (или если есть лучший способ).

 {% for page in image_pages %} // range loop for number of pages (passed from view)
    <p style="page-break-before: always"></p> // new page break for each page
    <div class="img-wrapper">
        {% for image in project_images|slice:"0:12" %}
             <div class="img-box" style="margin: 5px">
                <img
                  class="report-img"
                  src="{{ base_url }}{{ image.path.url }}"
                />
             </div>
        {% endfor %}
    </div>

{% endfor %}

Что я хочу сделать, так это настроить эту строку

  {% for image in project_images|slice:"0:12" %}

Что-то вроде (для печати 12 изображений из общего списка отправленных изображений)

  {% for image in project_images|slice:"page*12:page*12+12" %}

Вы можете написать свой собственный тег шаблона для нарезки с переменными аргументами. В шаблонизаторе, поставляемом Django, этого нет. Авторы считают, что правильное место для такого рода вещей - в коде Python. Что-то вроде

display = []
for page in image_pages:
    display.append([
        page, 
        project_images[page*12:page*12+12]
    ])
context['display'] = display

Тогда шаблон становится

{% for page, image_list in display %}
    <p style="page-break-before: always"></p> // new page break for each page
    <div class="img-wrapper">
    {% for image in image_list %}
         <div class="img-box" style="margin: 5px">
            <img
              class="report-img"
              src="{{ base_url }}{{ image.path.url }}"
            />
         </div>
    {% endfor %}
</div>
{% endfor %}

Другой вариант - использовать Jinja вместо шаблонизатора Django.

Вместе с этим ответом я сделал следующее, чтобы достичь того, что мне нужно. https://stackoverflow.com/a/23783666/14143473. Я также использовал https://pypi.org/project/django-mathfilters/

 {% for page in image_pages %}
       <p style="page-break-before: always"></p>
       {% with start=page|mul:12 end=page|mul:12|add:12 %}
       
            {% with start|addstr:":"|addstr:end as imageSlice %}
           
              <div class="img-wrapper">
                {% for image in project_images|slice:imageSlice %}
                <div class="img-box" style="margin: 5px">
                  <img
                    class="report-img"
                    src="{{ base_url }}{{ image.path.url }}"
                  />
                </div>
                {% endfor %}
              </div>
          

            {% endwith %}
  
       {% endwith %} 
{% endfor %}


Вернуться на верх