如何在循环内对Django视图进行分页

问题描述

我正在研究Django 3.0提供的分页功能,我想知道如何从循环内部实现分页功能

例如,使用此片段,在该片段中,我根据选定的类别检索图像集合并显示图像。每个类别有约800张图像,共有12个类别。我想要的是页面顶部的类别名称,大约20张图像,页面指示符。

class MyPage(View):

    def get(self,request):
        q_dict = request.GET
        sets = []   # the full data set to display on the page - a list of dictionaries 
        for category in categories:
            document_ids = list(DocumentMetaData.objects.filter(Metadata__has_key=category).values('document_id',flat=True))
            images = []
            for doc_id in document_ids:
                image = Documentimage.objects.get(document=doc_id)
                params = {'ID': doc_id,'Category': category}
                detail_url = encode_urls('details.html',params)
                urls = {'image_url': image.xsmall_file.url,'detail_url': detail_url}
                images.append(urls)
                # the dictionary contains the data to display on the page
                sets.append({'header': category.name,'images': images,})
        paginator = Paginator(sets,20)  # 20 images in each page
        if 'page' in q_dict:
            page = q_dict['page']
        else:
            page = 1
        try:
            page_obj = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer deliver the first page
            page_obj = paginator.page(1)
        except EmptyPage:
            # If page is out of range deliver last page of results
            page_obj = paginator.page(paginator.num_pages)
        ctx['page'] = page
        ctx['page_obj'] = page_obj
        ctx['sets'] = sets
        return render(request,'memorabilia/categoriesintermediate.html',context=ctx)   

模板:

{% for set in sets %}
    <div class="row">
    <div class="col-md-12">
        <h5>{{ set.header }}<h5>
    </div>
    </div>
    <div class="masonry">
    {% for image in set.images %}
    <div class="item" style="Box-shadow: 2px 2px 4px 0px #ccc;">
        <a href="{{ image.detail_url }}"><img  src="{{ image.image_url }}"></a>
    </div>
    {% endfor %}       
    </div>
{% endfor %}

<div class="pagination">
    <span class="step-links">
    {% if page_obj.has_prevIoUs %}
        <a href="?page=1">&laquo; first</a>
        <a href="?page={{ page_obj.prevIoUs_page_number }}">prevIoUs</a>
    {% endif %}

    <span class="current">
        Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
    </span>

    {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}">next</a>
        <a href="?page={{ page_obj.paginator.num_pages }}">last &raquo;</a>
    {% endif %}
    </span>
</div>

页面显示所有800 x 12 = 9,600张图像,并在页面底部显示一个简单的Page 1 of 1。看来我无法使用分页器中的设置列表。但是,我不确定如何在图像循环或类别循环中使用分页器。任何建议将不胜感激!

标记

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...