Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ListView django中的分页_Python_Django - Fatal编程技术网

Python ListView django中的分页

Python ListView django中的分页,python,django,Python,Django,我试图用html模板对我的表中的数据进行分页,但它不起作用。我使用列表视图中的默认分页系统。此外,我还有一个表单,用户可以在其中传递每页值的项目。这是我的views.py代码: class CategoryListView(ListView): model = Category def get_paginate_by(self, queryset, **kwargs): itemsForm = ItemsPerPageForm(self.request.GET)

我试图用html模板对我的表中的数据进行分页,但它不起作用。我使用列表视图中的默认分页系统。此外,我还有一个表单,用户可以在其中传递每页值的项目。这是我的views.py代码:

class CategoryListView(ListView):
    model = Category

    def get_paginate_by(self, queryset, **kwargs):
        itemsForm = ItemsPerPageForm(self.request.GET)
        if itemsForm.is_valid():
            itemsPerPage = itemsForm.cleaned_data.get('items_per_page')
            print(itemsPerPage)
            if itemsPerPage is None:
                return 4
            else:
                if itemsPerPage > 0 and itemsPerPage <= Category.objects.get_queryset().count():
                    return itemsPerPage
                else:
                    return 4
    def get_context_data(self, *, object_list=Expense.objects.get_queryset(), **kwargs):
        categoriesList = Category.objects.get_queryset()
        queryset = object_list
        return super().get_context_data(
            noOfExpenses=zip(categoriesList, noOfExpenses(queryset)),
            itemsForm = ItemsPerPageForm
        )
class CategoryListView(ListView):
型号=类别
def获取分页方式(self、queryset、**kwargs):
itemsForm=ItemsPerPageForm(self.request.GET)
如果itemsForm.is_有效():
itemsPerPage=itemsForm.cleaned\u data.get('items\u per\u page'))
打印(项目页面)
如果itemsPerPage为无:
返回4
其他:
如果itemsPerPage>0且itemsPerPage
class MyView(ListView):
template_name=“page.html”
分页方式=4
def获取分页方式(自身、查询集):
itemsForm=ItemsPerPageForm(self.request.GET)
如果itemsForm.is_有效():
itemsPerPage=itemsForm.cleaned\u data.get('items\u per\u page'))
itemsPerPage=int(itemsPerPage)
打印(项目页面)

如果itemsPerPage>0,itemsPerPage好,那么我找到了答案。Django中的通用视图使用
object\u list
作为查询集。然后使用它渲染queryset中的数据。我需要将
noOfExpenses
更改为
object\u list
,并将其转换为
list
,仅此而已。

也许您必须将itemsPerPage转换为intshow,向我们展示您的listview代码的其余部分对,它成功了,现在显示了第1页,共1页。但是,尽管如此,在每页传递了大量项目后,它仍然显示4个项目,即使页面数量发生变化。您可以将此变量保存到会话并在模板中查看它,我更改了代码(未测试),希望它能正常工作。好吧,项目数量仍然没有变化。我不知道,可能是我的模板有问题,可能是我忘了在
for循环中包含一些内容。这就像循环的
for
总是迭代四次,即使每页的项目数发生了变化。也许有一个函数可以打破循环或每页只迭代
次?请分享你的观点好吗?
</table>
<tbody>
    {% for category, expenses in noOfExpenses %}
      <tr>
        <td>{{ page_obj.start_index|add:forloop.counter0}}.</td>
        <td>{{ category.name|default:"-" }}</td>
        <td>{{ expenses }}</td>
      </tr>
    {% empty %}
      <tr>
        <td colspan="6">no items</td>
      </tr>
    {% endfor %}
</tbody>
</table>
<hr/>
    {% include "_pagination.html" %}
    {{page_obj}}
    <form method="get" action="">
    {{itemsForm.as_p}}
    <button type="submit">submit</button>
    </form>
<div class="pagination">
    <span class="pagination__nav">
        {% 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 %}
    <br/> Total items: {{page_obj.paginator.count}}
    </span>
</div>
class MyView(ListView):
    template_name = "page.html"
    paginate_by = 4

    def get_paginate_by(self, queryset):
        itemsForm = ItemsPerPageForm(self.request.GET)
        if itemsForm.is_valid():
            itemsPerPage = itemsForm.cleaned_data.get('items_per_page')
            itemsPerPage = int(itemsPerPage)
            print(itemsPerPage)
            if  itemsPerPage > 0 and itemsPerPage <= Category.objects.get_queryset().count():
                    self.request.session['paginate_by'] = itemsPerPage
                else:
                    self.request.session['paginate_by'] = self.paginate_by
        return self.request.GET.get('paginate_by', self.paginate_by)