View.py

时间:2017-04-16 17:30:15

标签: python ajax django django-pagination

我在Django中使用Pagination但是使用AJAX所以我必须将所有变量值从视图发送到AJAX调用。但是对于当前页面,没有可用的内置变量?正如我看到的官方文档。那么如何发送已在view.py中计算过的数据呢?

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

链接参考Following this example

3 个答案:

答案 0 :(得分:0)

进行分页/ ajax / django模板标记的唯一合理方法是在django视图中生成整个表+当前页面数据+表格导航等。即将表的所有变量从包含的页面移动到表的视图。

可能更好的解决方案是找到一个javascript表组件并让django为它提供数据......

答案 1 :(得分:0)

您可以通过向URL添加GET参数,从同一视图传递分页内容,以检查页码并将ajax请求发送到同一视图,而不是创建两个不同的视图。这样,对于相同的内容,管理一个视图而不是两个视图会更容易。如果您的视图不仅仅是生成特定内容,那么在使用ajax时,您可以轻松地拆分视图,以便一个视图仅提供相关内容。

例如,如果视图的网址为\url-to-somepage 您可以将ajax请求发送到\url-to-somepage?page=2

然后在您的模板文件中,说出template.htmlinclude另一个模板,对于要分页的内容说__sub_template.html。像,

<div>
    <!--
        rest of the page
    -->
    {% include 'templates\__sub_template.html' %}
</div>

然后在你看来,

.def your_view(request):
    """
    Your code here
    """
    paginator = Paginator(contacts, number)
    page = request.GET.get('page')
    try:
        result_list = paginator.page(page)
    except PageNotAnInteger:
        result_list = paginator.page(1)
    except EmptyPage:
        result_list = []
    if page:
        return render(request, '__sub_template.html', {'contacts': result_list})
    else:
        return render(request, 'template.html', {'contacts': result_list})

答案 2 :(得分:0)