繁体   English   中英

Django Tags结果分页不符合我的预期

[英]Django Tags results pagination not working as I expected

我正在尝试对我从标签中获得的结果进行分页,但是它无法正常工作。 如果我有三个帖子,则分页器将显示三个结果页面,如果我有两个帖子,则分页器将显示两个结果页面。 我有多少个帖子那就是分页器将拥有多少页。 如果我使用分页器从数据库返回正常结果,则它可以工作。 我所做的就是复制它,并尝试对其进行修改以适合标签分页。 但是它没有按我预期的那样工作。 我还将分页放在一个include文件中,试图使它保持干态,但我不确定这是否是我的问题,这是我的代码。

pagination.html:

<div class="text-center" style="margin-bottom: 20px">
<ul class="pagination">
{% if queryset.has_previous %}
    <li><a href="?page=1"><<</a></li>
    <li><a href="?{{ page_request_var }}={{ queryset.previous_page_number }}
{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">prev</a></li>
{% endif %}


{% for i in paginator.page_range %}

 <li {% if page_obj.number == i %} class="active" {% endif %}><a href="?page={{i}}">{{i}}</a><li>
<!--Page {{ queryset.number }} of {{ queryset.paginator.num_pages }}.-->

{% endfor %}


{% if queryset.has_next %}
    <li><a href="?{{ page_request_var }}={{ queryset.next_page_number }}
    {% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">next</a></li>
    <li><a href="?page={{ queryset.paginator.num_pages }}">>></a></li>
{% endif %}
</ul>

这种分页不起作用我希望它如何views.py:

def tag_list(request, slug=None):
instance = get_object_or_404(Tag, slug=slug)
ins = instance.post_set.all()

query = request.GET.get("q")
if query:
    ins = ins.filter(
            Q(title__icontains=query) |
            Q(content__icontains=query) |
            Q(user__first_name__icontains=query) |
            Q(user__last_name__icontains=query)
    ).distinct()

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

context = {
    "instance": ins,
    "queryset": queryset,
    "paginator": paginator,

}
return render(request, "posts/tag_list.html", context)

以下是我复制分页的位置。 这个作品

def post_list(request):
today = timezone.now().date()
queryset_list = Post.objects.active()
if request.user.is_staff or request.user.is_superuser:
    queryset_list = Post.objects.all()

query = request.GET.get("q")
if query:
    queryset_list = queryset_list.filter(
            Q(title__icontains=query) |
            Q(content__icontains=query) |
            Q(user__first_name__icontains=query) |
            Q(user__last_name__icontains=query)
    ).distinct()
paginator = Paginator(queryset_list, 6)  # Show 25 contacts per page
page_request_var = "page"
page = request.GET.get(page_request_var)
try:
    queryset = paginator.page(page)
except PageNotAnInteger:
    # If page is not an integer, deliver first page.
    queryset = paginator.page(1)
except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results.
    queryset = paginator.page(paginator.num_pages)
context = {
        "queryset": queryset,
        "title": "Posts",
        "page_request_var": page_request_var,
        "today": today,
        "queryset_list": queryset_list,
        "paginator": paginator,
    }

return render(request, "posts/post_list.html", context)

分页器的第二个参数是每页显示多少个结果,当前您将其设置为1,根据您的评论,您可能希望此值为4

paginator = Paginator(ins, 1)

应该

paginator = Paginator(ins, 4)

您也永远不会将page_request_var传递回模板,这意味着它将永远找不到正确的页面,然后返回同一页面

context = {
    "instance": ins,
    "queryset": queryset,
    "paginator": paginator,
    "page_request_var": page_request_var
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM