标签: django-pagination

通过django分页仅显示部分页码

我在模板中使用django paginator.它工作正常,但是当有大量页面时效果不佳.

views.py:

def blog(request):
    blogs_list = Blog.objects.all()

    paginator = Paginator(blogs_list, 1)

    try:
        page = int(request.GET.get('page', '1'))
    except:
        page = 1

    try:
        blogs = paginator.page(page)
    except(EmptyPage, InvalidPage):
        blogs = paginator.page(page)
    return render(request, 'blogs.html', {
        'blogs':blogs
        })
Run Code Online (Sandbox Code Playgroud)

模板的片段:

  <div class="prev_next">

    {% if blogs.has_previous %}
      <a class="prev btn btn-info" href="?page={{blogs.previous_page_number}}">Prev</a>
    {% endif %}
    {% if blogs.has_next %}
      <a class="next btn btn-info" href="?page={{blogs.next_page_number}}">Next</a>
    {% endif %}
    <div class="pages">
      <ul>
      {% for pg in blogs.paginator.page_range %}
        {% if blogs.number == pg %}
          <li><a href="?page={{pg}}" …
Run Code Online (Sandbox Code Playgroud)

django django-pagination

24
推荐指数
5
解决办法
1万
查看次数

Django Rest Framework 3.1打破了pagination.PaginationSerializer

我刚刚更新到Django Rest Framework 3.1,似乎一切都崩溃了.

在我的serializers.py我有以下代码:

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
    model = task
    exclude = ('key', ...)

class PaginatedTaskSerializer(pagination.PaginationSerializer):
    class Meta:
        object_serializer_class = TaskSerializer
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好.现在随着3.1的发布,我无法找到关于如何做同样事情的例子,因为PaginationSerializer已经不存在了.我试图子类PageNumberPagination并使用它的默认paginate_querysetget_paginated_response方法,但我不能再将它们的结果序列化.

换句话说,我的问题是我不能再这样做了:

class Meta:
    object_serializer_class = TaskSerializer
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

提前致谢

python django pagination django-pagination django-rest-framework

17
推荐指数
2
解决办法
8696
查看次数

Django分页...切片页面显示总页数的一小部分?

我的分页模块大部分都在工作,但是有一个问题.我怎样才能显示总可用页面的一部分.例如,假设我在n页的第5页上,我想展示.

1,2,3,4,5,6 ....(N-1)(N).

我相信Ruby有一些花哨的前端魔术来实现这一目标.在django模块中我能做些什么吗?

从其他网站看,似乎逻辑基本上是,选择固定数量的点.如果该数字大于当前显示的数量,请在用户向前翻页时添加项目.达到该点数后,仅在当前页面的左侧和右侧显示x个点.

我应该编写自己的模板逻辑来实现这一目标吗?

谢谢

django django-pagination

15
推荐指数
2
解决办法
1万
查看次数

Django REST框架中的Paginate关系?

我们正在为我们的API使用Django REST Framework,我们需要对返回多个项目的关系字段进行分页.

要演示使用类似于文档中的示例:

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ('order', 'title')

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Album
        fields = ('album_name', 'artist', 'tracks')
Run Code Online (Sandbox Code Playgroud)

相册的序列化输出示例:

{
    'album_name': 'The Grey Album',
    'artist': 'Danger Mouse'
    'tracks': [
        {'order': 1, 'title': 'Public Service Annoucement'},
        {'order': 2, 'title': 'What More Can I Say'},
        {'order': 3, 'title': 'Encore'},
        ...
    ],
}
Run Code Online (Sandbox Code Playgroud)

如果在专辑中有数百首曲目,则会出现问题.在这种情况下,有没有办法对"曲目"进行分页?

理想情况下,我知道在这种情况下,"轨道"应该指向一个API URL,它只返回特定相册的轨道 - 这反过来可以很容易地分页.该方法的缺点是获得连续前几个轨道所需的额外请求(以及因此延迟等).在我们的例子中,重要的是我们能够通过对Album API的单个请求获得至少一些轨道,然后在需要时动态加载其余轨道.

DRF是否为此提供任何特定功能或模式?或者有任何工作吗?

api django pagination django-pagination django-rest-framework

15
推荐指数
2
解决办法
4385
查看次数

使用API​​-View在Django-Rest-Framework中进行分页

我目前有一个API视图设置如下:

class CartView(APIView):
    authentication_classes = [SessionAuthentication, TokenAuthentication]
    permission_classes = [IsAuthenticated, ]
    api_view = ['GET', 'POST']

    def get(self, request, format=None):
        try:
            cart = request.user.cart
        except Cart.DoesNotExist:
            cart = Cart.objects.create(user=request.user)
        cart_details = cart.cart_details.all()
        serializer = CartDetailSerializer(cart_details, many=True, fields=['id', 'item', 'quantity', 'product_type'])
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

CartDetailSerializer是一个普通的ModelSerializer.

我想分页这个API.但是,在DRF的文档中,我发现了这个:

如果您使用常规APIView,则需要自己调用分页API以确保返回分页响应.

没有关于如何对常规APIView API进行分页的示例.

任何人都可以发布一个我可以在上面的场景中使用的例子.

谢谢.

django django-pagination django-rest-framework

12
推荐指数
2
解决办法
1万
查看次数

django分页和RawQuerySet

有没有办法使用django的内置分页对rawqueryset进行分页?当我把它投射到列表时,它会在我的脸上抛出一个错误... TypeError:期望的字符串或Unicode对象,找到NoneType.有没有解决的办法?

python django django-pagination

11
推荐指数
2
解决办法
5097
查看次数

Django分页显示问题:显示所有页码

有没有办法让django分页的页面显示更好?我按照[doc] [1]来创建它,但希望有简单的方法来组织页码显示.

目前,它显示所有页面,比如说我有10页,然后是前
一页1 2 3 4 5 6 7 8 9 10

如果有100,那么它将显示所有100,这是非常疯狂的.

有什么方法可以简单地显示它吗?

例:

上一页1 2 3 ... 67 ... 98,99,100下一张(67是当前页)

prev 1 2 3 ... 65 66 67 68 69 ... 100 next

它不必看起来像上面的示例,但只是不希望它显示每个页面编号没有限制.

就像文档一样,我使用下面的代码创建了我的分页.

模板文件

{% if is_paginated %}
<div id="pagination">
<ul>
    {% if page_obj.has_previous %}
        <li> <a href="?page={{page_obj.previous_page_number}}">Previous</a> </li>
    {% else %}
        <li> Previous</li>
    {% endif %}
    {% for page_number in paginator.num_pages|template_range %}
        {% ifequal page_number page_obj.number %}
            <li class="currentpage">{{page_number}}</li>
        {% else %}
            <li> <a …
Run Code Online (Sandbox Code Playgroud)

django pagination django-pagination

10
推荐指数
1
解决办法
8334
查看次数

django无限卷轴

是否可以在向下滚动时实现facebook样式的内容加载?我想在电子商务网站中实现它.每个类别中有很多项目,类别页面变得太长.我可以实现页码,但我的客户希望我实现facebook类型的加载.有什么我可以用的吗?该网站的其余部分已经建成.

我确实研究过django-endless-pagination但是无法让它工作.有没有它的演示,以便我可以调查它?

django django-pagination django-endless-pagination

10
推荐指数
1
解决办法
5901
查看次数

Django分页

我需要进行真正的分页,而不是对所有已检索的数据进行分页.Django文档站点中的示例,如;

def listing(request):
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page

    page = request.GET.get('page')
    try:
        contacts = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        contacts = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        contacts = paginator.page(paginator.num_pages)

    return render_to_response('list.html', {"contacts": contacts})
Run Code Online (Sandbox Code Playgroud)

此代码在所有已检索记录上分页记录.但是有一个麻烦.如果记录太多,试图检索所有记录需要花费很多时间.我需要一个解决方案来从数据库中逐页检索记录.

在Django中有另一种解决方案吗?

python django mongodb django-pagination

8
推荐指数
1
解决办法
3525
查看次数

如何在 Django 分页器中使用 get_elided_pa​​ge_range ?

有一个创建分页范围的新选项 - get_elided_pa​​ge_range https://docs.djangoproject.com/en/3.2/ref/paginator/#django.core.paginator.Paginator.get_elided_pa ​​ge_range

我应该如何使用它?如何设置参数?我正在使用 CBV ListView。我尝试了https://nemecek.be/blog/105/how-to-use-elided-pagination-in-django-and-solve-too-many-pages-problem但它对我不起作用。

我有 81 页,当前页是 10。问题是我总是有范围 1 2 3 4 ... 80 81 我做错了什么?

#views.py

class TrailersListView(ListView):
    queryset = Trailer.objects.all()
    paginate_by = 10
Run Code Online (Sandbox Code Playgroud)

#模板.html

{% for i in paginator.get_elided_page_range %}
    {% if page_obj.number == i %}
        <li class="active page-item">
            <span class="page-link">{{ i }}</span>
        </li>
    {% else %}
        {% if i == paginator.ELLIPSIS %}
            <li class="page-item">
                <span class="page-link">{{ paginator.ELLIPSIS }}</span>
            </li>
        {% else %}
            <li class="page-item">
                <a class="page-link" href="?page={{ i }}">{{ i }}</a> …
Run Code Online (Sandbox Code Playgroud)

django pagination django-pagination

8
推荐指数
2
解决办法
4782
查看次数