当前位置: 首页 > 面试题库 >

如何对基于Django类的通用ListView使用分页?

孔磊
2023-03-14
问题内容

如何在Django 1.3中使用分页?

该文档对此不是很清楚。

  • 我views.py怎么了?

  • 我的模板如何处理?

  • URLconf文件中有什么内容?


问题答案:

我认为你需要有关将分页与基于新类的视图一起使用的信息,因为使用基于传统函数的视图很容易找到。我发现仅通过设置paginate_by变量就足以激活分页。请参见基于类的通用视图。

例如,在你的views.py

import models
from django.views.generic import ListView

class CarListView(ListView):
    model = models.Car      # shorthand for setting queryset = models.Car.objects.all()
    template_name = 'app/car_list.html'  # optional (the default is app_name/modelNameInLowerCase_list.html; which will look into your templates folder for that path and file)
    context_object_name = "car_list"    #default is object_list as well as model's_verbose_name_list and/or model's_verbose_name_plural_list, if defined in the model's inner Meta class
    paginate_by = 10  #and that's it !!

在你的模板(car_list.html),你可以包括这样的分页部分(我们有一些情境变量可用:is_paginatedpage_obj,和paginator)。

{# .... **Normal content list, maybe a table** .... #}
{% if car_list %}
    <table id="cars">
        {% for car in car_list %}
            <tr>
                <td>{{ car.model }}</td>
                <td>{{ car.year }}</td>
                <td><a href="/car/{{ car.id }}/" class="see_detail">detail</a></td>
            </tr>
        {% endfor %}
    </table>
    {# .... **Now the pagination section** .... #}
    {% if is_paginated %}
        <div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="/cars?page={{ page_obj.previous_page_number }}">previous</a>
                {% endif %}
                <span class="page-current">
                    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
                </span>
                {% if page_obj.has_next %}
                    <a href="/cars?page={{ page_obj.next_page_number }}">next</a>
                {% endif %}
            </span>
        </div>
    {% endif %}
{% else %}
    <h3>My Cars</h3>
    <p>No cars found!!! :(</p>
{% endif %}
{# .... **More content, footer, etc.** .... #}

要显示的页面由GET参数指示,只需将?page=nURL 添加到即可。



 类似资料:
  • 问题内容: 我试图实现一个显示表集的选择。如果是第一次请求该站点,则应显示数据集。我希望POST提交,但是GET也可以。 这是一个很容易处理的问题,但是对于基于类的视图,我很难理解。 我的问题是,由于对基于分类的视图的了解有限,导致出现各种错误。我已经阅读了各种文档,并且了解了直接查询请求的视图,但是一旦我想向查询语句中添加表单,就会遇到不同的错误。对于以下代码,我收到了。 根据表单条目(否则选择

  • 问题内容: 主视图是一个简单的分页ListView,我想向其中添加搜索表单。 我认为这样可以解决问题: 但是显然我错了..我在官方文档中找不到该怎么做的方法。 建议? 问题答案: 这些答案对引导我朝正确的方向大有帮助。谢谢大家 对于我的实现,我需要一个窗体视图,该窗体视图同时在get和post上返回ListView。我不喜欢重复get函数的内容,但需要进行一些更改。现在,self.form也可以从

  • 问题内容: 我在理解新CBV的工作方式时遇到了一些麻烦。我的问题是,我需要在所有视图中登录,在某些视图中需要特定的权限。在基于函数的视图中,我使用@permission_required()和视图中的login_required属性来执行此操作,但是我不知道如何在新视图上执行此操作。django文档中是否有某些部分对此进行了解释?我什么都没找到 我的代码有什么问题? 我尝试使用,但它回答“ 处的T

  • 本文向大家介绍Django实现基于类的分页功能,包括了Django实现基于类的分页功能的使用技巧和注意事项,需要的朋友参考一下 开发个人博客时往往避免不了分页功能的实现,实现方法大体上分为函数和类两种。本文基于类实现分页功能,以下是详细代码: 通过修改per_page、max_page控制每页展示的文章数和分页模块展示的最大页码数。 实现思路:创建page类对象,传入参数为page_num(当前页

  • 问题内容: 我正在尝试过滤一个类的实例数组。我想要一个由类属性之一过滤的新数组。Swift过滤器在此用例中的工作方式无法完全理解。 问题答案: 这应该工作… 您可能需要使您的枚举符合等式才能进行此比较。 $ 0是一个未命名的参数,您也可以这样做。 编辑:我刚刚测试了它,它的工作而不会使枚举符合等于。我认为您只需要在枚举带有参数时执行此操作。

  • 问题内容: 我有一个带有几个视图的django应用程序,这些视图通过POST请求接受json对象。json对象是中等复杂的,具有几层嵌套,因此我正在使用json库解析raw_post_data,如下所示: 接下来,我要为这些视图编写测试。不幸的是,我不知道如何将json对象传递给客户端。这是我的代码的最简单的版本: 当我运行测试时,它失败并显示: 如何在Client.post方法中传递JSON对象