我在Django中使用Pagination但是使用AJAX所以我必须将所有变量值从视图发送到AJAX调用。但是对于当前页面,没有可用的内置变量?正如我看到的官方文档。那么如何发送已在view.py中计算过的数据呢?
<span class="current">
Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
</span>
答案 0 :(得分:0)
进行分页/ ajax / django模板标记的唯一合理方法是在django视图中生成整个表+当前页面数据+表格导航等。即将表的所有变量从包含的页面移动到表的视图。
可能更好的解决方案是找到一个javascript表组件并让django为它提供数据......
答案 1 :(得分:0)
您可以通过向URL添加GET参数,从同一视图传递分页内容,以检查页码并将ajax请求发送到同一视图,而不是创建两个不同的视图。这样,对于相同的内容,管理一个视图而不是两个视图会更容易。如果您的视图不仅仅是生成特定内容,那么在使用ajax时,您可以轻松地拆分视图,以便一个视图仅提供相关内容。
例如,如果视图的网址为\url-to-somepage
您可以将ajax请求发送到\url-to-somepage?page=2
然后在您的模板文件中,说出template.html
,include
另一个模板,对于要分页的内容说__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)