为了账号安全,请及时绑定邮箱和手机立即绑定

ListView 的分页 - Django

ListView 的分页 - Django

德玛西亚99 2022-01-18 17:54:35
意见class ThreadListView(ListView):    model = Thread    template_name = 'forums/thread.html'    def get_context_data(self, **kwargs):        # Call the base implementation first to get a context        context = super().get_context_data(**kwargs)        # Add in a QuerySet of the Thread & Replies        context['thread'] = Thread.objects.get(pk=self.kwargs['pk'])        context['reply'] = Thread.objects.get(pk=self.kwargs['pk']).replies.all()        return contextHTML{% extends 'forums/base.html' %}{% block title %} Forum - {{ thread.title }} {% endblock title %}{% block content %}<!--Thread real--><table class="table table-hover">    <thead>        <tr class="table-primary">            <th class="col-2"><a href="{% url 'threadview' thread.id %}"> {{ thread.title }}</a></th>            <th scope="col-10" id="content-col"></th>        </tr>    </thead>    <tbody>        <!--Thread Author and Content-->        <tr class="table-info">            <td class="border-right text-center">                <span>                    <img class="rounded-circle" style="height: 100px;width: 100px;"                        src="{{ thread.author.profile.image.url }}"> <br />                    Username:&emsp;<a href="#">{{ thread.author.username|capfirst }}</a> <br />                    Ranks:&emsp;                    <!--Ranks Go Here--> <br />                    <hr>                    Posts:&emsp;                    <!--Posts Go Here--> <br />                    Badges:&emsp;                    <!--Badges Go Here--> <br />                    <hr>                    Date Joined:&emsp;{{thread.author.date_joined| date:'Y-m-d'}} <br />                </span>            </td>{% endblock content %}我想对线程 ListView 进行分页。Thread ListView 显示 Thread,然后显示该线程上的回复。我希望能够将所有内容分成页面。例如,线程以 Thread 帖子和 10 个回复开始,然后要查看一些较新的回复,您可以单击下一页。
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

将其设为ListViewforReplies并简单地使用paginate_by.


class ThreadListView(ListView):

    model = Reply  #change the model

    template_name = 'forums/thread.html'

    paginate_by = 10  # add pagination on the list


    def get_queryset(self):

        self.thread = Thread.objects.get(pk=self.kwargs['pk'])

        return self.thread.replies.all().order_by('date_posted')



    def get_context_data(self, **kwargs):

        # Call the base implementation first to get a context

        context = super().get_context_data(**kwargs)

        # Add in a QuerySet of the Thread & Replies

        context['thread'] = self.thread

        return context

然后,在您的模板中,添加分页代码。使用object_list遍历回复


...

    <!--Reply Author and Content-->

        {% for rply in object_list %}  

....



<div class="container">

    {% if is_paginated %}

    {% if page_obj.has_other_pages %}

    <ul class="pagination justify-content-center" style="margin:20px 0">

        {% if page_obj.has_previous %}

        <li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}">Previous</a></li>

        {% else %}

        <li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>

        {% endif %}

        {% for i in page_obj.paginator.page_range %}

        {% if page_obj.number == i %}

            <li class="page-item active"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>

        {% else %}

            <li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>

        {% endif %}

        {% endfor %}

        {% if page_obj.has_next %}

        <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">Next</a></li>

        {% else %}

        <li class="page-item disabled"><a class="page-link" href="#">Next</a></li>

        {% endif %}

    </ul>

    {% endif %}

{% endif %}

</div>


查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号