Django Paginator在第一页之后不工作
正如标题所说,我的分页器在我点击去第二页时什么都不显示。
首先,让我简单介绍一下我的页面:
这个页面的功能是接收用户输入的请求,指定他们想查看的“通话记录”的时间段,还有其他一些筛选条件(这很重要)。所以基本上,用户会提供一个开始日期和结束日期,我用这些日期来过滤我的数据。
链接到“第二页”的形式是:“localhost:8000/?page=2”,这个链接会重定向到我现有的页面,但没有任何数据。现在很明显,下一页的链接应该包含其他参数,比如start_date=xxxx-xx-xx,不然就无法正常工作。
这是我view.py的一部分,我删掉了很多行以简化内容,代码运行得很好:
if request.GET:
filter_form = ReportFilterForm(request.GET)
if filter_form.is_valid():
start = filter_form.cleaned_data["start_date"]
end = filter_form.cleaned_data["end_date"]
#a bunch of omitted lines that use the form to filter
paginator = Paginator(queryset, 100)
try:
page = int(request.GET.get('page', '1'))
except ValueError:
page = 1
try:
call_logs = paginator.page(page)
except (EmptyPage, InvalidPage):
call_logs = paginator.page(paginator.num_pages)
else:
filter_form = ReportFilterForm()
return render_to_response('xxxx.html',
{'queryset': queryset,
'filter_form': filter_form,
'call_logs': call_logs,
})
这是我的模板xxxx.html,只有分页器的部分,比较标准,来自文档:
{% if call_logs.paginator.num_pages %}
<div class="pagination">
<span class="step-links">
{% if call_logs.has_previous %}
<a href="**{{ SOME_MAGIC_TEMPLATE_VARIABLE_THAT_GETS_CURRENT_ABSOLUTE_URL}}**&?page={{ call_logs.previous_page_number }}"><<</a>
{% endif %}
<span class="current">
Page {{ call_logs.number }} of {{ call_logs.paginator.num_pages }}
</span>
{% if call_logs.has_next %}
<a href=" **{{ SOME_MAGIC_TEMPLATE_VARIABLE_THAT_GETS_CURRENT_ABSOLUTE_URL}}**&page={{ call_logs.next_page_number }}">>></a>
{% endif %}
</span>
</div>
{% endif %}
我的问题是,如何在django模板中获取当前窗口的URL,而不是用javascript?谢谢。
2 个回答
1
我的问题是,如何在Django模板中获取当前窗口的URL,而不是使用JavaScript?谢谢。
这可能不是最正确的方法,但你可以看看这个帖子。
不过我建议你不要把过滤和分页混在一起。
你可以在做过滤时使用AJAX,创建一个专门处理过滤的新函数,或者你也可以用同一个函数并测试一下if request.is_ajax():
,这样当用户进行过滤时,你就能在URL中得到过滤的数据(开始日期、结束日期)。
然后,当用户想要翻到下一页时,你已经在URL中有了过滤的参数,可以用来创建一个查询集,然后传给分页器。
如果要处理JavaScript不活跃的情况,你可以用一个简单的POST表单来替代AJAX,只要记得不要把过滤和分页混在一起就行了 :)
希望这能帮到你 :)
1
如果我理解得没错,你可以从请求对象中添加完整的路径到上下文里:
return render_to_response('xxxx.html',
{'queryset': queryset,
'filter_form': filter_form,
'call_logs': call_logs,,
'magic_url': request.get_full_path(),
})