模板中的Django切片变量

jgwigjjp  于 2022-12-01  发布在  Go
关注(0)|答案(2)|浏览(202)

我试着把一系列的图片分割成几页,但是我不确定我需要使用什么语法(或者是否有更好的方法)。

{% 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" %}
1szpjjfi

1szpjjfi1#

你可以编写自己的模板标签来使用变量参数进行切片。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模板引擎。

mrfwxfqh

mrfwxfqh2#

除了这个答案,我还做了下面的事情来实现我所需要的。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 %}

相关问题