gpt4 book ai didi

python - Django (2.0.4) 分页器 get_page() 无法正常工作

转载 作者:行者123 更新时间:2023-11-30 22:17:03 25 4
gpt4 key购买 nike

我的问题完全出在 Paginator get_page() 方法上。这是我的查看代码:

@login_required
def photo_index_default_album(request):
album = Album.get_default_album(request.user)

photo_list = album.photo_set.all()

paginator = Paginator(photo_list, 2) # Show 2 photo per page
page = request.GET.get('sayfa')
photos = paginator.get_page(page)

context = {
'title': album.name,
'photo': photos,
}

return render(request, 'photo/index.html', context)

paginator.get_page(page) 仅适用于 1 页。在第二页之后,它返回一个包含 object_list 和空 QuerySet 的页面。

顺便说一句,大概是基础知识吧。我只是想知道,这两个作业有什么区别:

选项 1:

photo_list = Photo.objects.all()
photo_list.filter(Q(album=album.id))

选项2:

photo_list = Photo.objects.filter(album=album.id)

更新:好的,我明白两个选项之间的区别。但我的问题仍然存在。我根据您的有用答案更新了上面的查询代码。

问题:此分页仅适用于 1. 分页。如果页面值的“sayfa”变量变得不等于 1,则它不起作用。在这种情况下,paginator.get_page() 返回一个包含 object_list 和空 QuerySet 的页面。检查 photo_list.count() 页面,它们在每次调用中都是正确的。此外,模板中的分页器变量对于首页和最后一页也适用。但我没有显示导致空返回的图像。为什么 paginator.get_page(page) 返回一个带有空 QuerySet 的 object_list,而分页不等于 1?顺便说一句,我使用 MongoDB 作为数据库后端。

奇怪的事情:如果我指定 photo_list = Photo.objects.all(),我的模板将按预期工作。但我只想显示特定相册的照片。 最终更新说明:由于大量图像我没有注意到问题,它也有错误。

最终更新:(解决方案)查询结果错误的原因是 Djongo 包的 LIMIT-OFFSET 查询的错误。我打开了一个问题,https://github.com/nesdis/djongo/issues/106 .

我的模型:

class Photo(models.Model):
image = models.ImageField()
album = models.ManyToManyField(Album)

class Album(models.Model):
name = models.CharField(max_length=150)
user = models.ForeignKey('accounts.MyUser', verbose_name='Album Owner', on_delete=models.CASCADE)

我的模板:很抱歉给您带来不便,它有点长..

{% extends 'base.html' %}

{% block title %}
{{ block.super }} - {{ title }}
{% endblock %}

{% block body %}
<div class="container">
{% for pht in photo %}
<div class="row justify-content-center" style="margin-bottom: 30px">
<div class="col-md-6">
<div class="card">
{% if pht.image %}
<img class="card-img-top img-fluid" src="{{ pht.image.url }}" alt="Card image cap">
{% endif %}
<div class="card-body">
<h5 class="card-title">{{ title }}
<small style="color: #4e555b"> {{ pht.upload_date|timesince }} before</small>
</h5>
{% if request.user.is_authenticated %}
<a href="{{ pht.get_delete_url }}" class="btn btn-danger">Delete</a>
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}

<div class="row justify-content-center" style="margin-bottom: 30px">
<div class="col-md-6">
<div class="pagination">
<span class="step-links">
{% if photo.has_previous %}
<a href="?sayfa=1{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">&laquo; first</a>
<a href="?sayfa={{ photo.previous_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">previous</a>
{% endif %}

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

{% if photo.has_next %}
<a href="?sayfa={{ photo.next_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">next</a>
<a href="?sayfa={{ photo.paginator.num_pages }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">last &raquo;</a>
{% endif %}
</span>
</div>
</div>
</div>

</div>

{% endblock %}

最佳答案

除非结果存储回 photo_list 中,否则第二行

photo_list = Photo.objects.all()
photo_list.filter(Q(album=album.id))

没有效果。这是您提供的两段代码之间的唯一区别(为了便于阅读,我建议使用基于 filter 的第二段代码)。

关于python - Django (2.0.4) 分页器 get_page() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49754934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com