【问题标题】:Does TemplateView supports pagination?TemplateView 是否支持分页?
【发布时间】:2021-03-01 13:07:30
【问题描述】:

如何使用 Templateview 实现分页?下面的视图是基于类的视图,我使用 Templateview 列出网络(我从另一个应用程序的 api 调用)。这里我没有使用模型,所以我不能使用 Listview,因为我没有查询集。

class classView(TemplateView):
 
    template_name = 'view_network.html'
    # paginate_by = 5
    context_object_name = 'networks'
    paginator = Paginator('networks', 5)

def get_context_data(self, **kwargs):
    ...
    ...
    return context

在 html 页面中我添加了这个:

<span class="step-links" style="margin-left: 30%;
margin-bottom: 0px;
margin-top: 0px;
width: 100%;">
    <div style="text-align: justify"></div>
    <table style="width: 50%">
    <tr>
        {% if page_obj.has_previous %}
        <td><a href="?page=1">&laquo; First</a></td>
        <td> <a href="?page={{ page_obj.previous_page_number }}">Previous</a></td>
        {% endif %}

        <td> Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.</td>

        {% if page_obj.has_next %}
        <td><a href="?page={{ page_obj.next_page_number }}">Next</a></td>
        <td><a href="?page={{ page_obj.paginator.num_pages }}">Last &raquo;</a></td>
        {% endif %}
    </tr>
    </table>
</div>
</span>

</div>
    

【问题讨论】:

    标签: javascript django django-views pagination django-templates


    【解决方案1】:

    TemplateView 不支持分页,您必须使用 ListView 才能使用“paginate_by = 5”Here 是检查每个基于类的通用视图的所有属性/方法的有用链接。

    【讨论】:

    • 这里不能使用 ListView。
    【解决方案2】:

    您可以在get_context_data() 函数中实现分页。假设networks 是一个对象列表。

    def get_context_data(self, **kwargs):
        page_size = 5
        paginator = Paginator(networks, page_size)
    
        page = request.GET.get('page', 1)
        page_obj = paginator.page(page)
    
        context = {
            "page_obj": page_obj
        }
    
    

    【讨论】:

    • 页面在变化,但所有页面的数据相同。
    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多