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 %}