正如标题中所提到的,当我点击进入第一页以外的页面时,我的分页器没有显示任何内容。
首先,让我描述一下我的页面:
它的功能是从用户那里获得一个请求输入,指定他希望看到一堆“通话记录”以及其他过滤器的周期间隔(这很重要)。所以基本上是请求的开始和结束日期,我用它来过滤我的对象。
“page2”的链接类似于:“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,只是paginator部分,非常标准,取自文档:
{% 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模板而不是javascript获取当前窗口URL? 谢谢。
答案 0 :(得分:1)
我的问题是如何获得 使用django的当前窗口URL 模板而不是javascript?谢谢 你。
没有必要以正确的方式执行此操作,但您可以查看此post
但我建议您不要将过滤器与分页混合使用。
而不是你可以在进行过滤时使用AJAX,你可以创建一个单独处理过滤的新函数,或者你可以使用相同的函数并测试if request.is_ajax():
,就像当用户过滤你所拥有的那样时URL中的过滤器数据(start_date,end_date)。
现在,当用户想要传递到下一页时,您已经在url中使用了filter参数,您可以使用该参数创建将传递给Paginator的查询集。
要处理 javascript not active ,您可以使用简单的POST表单替换AJAX,并记住不要将过滤与分页混合:)
希望这会有所帮助:)
答案 1 :(得分:1)
如果我理解正确的话,您可以从请求对象添加上下文的完整路径:
return render_to_response('xxxx.html',
{'queryset': queryset,
'filter_form': filter_form,
'call_logs': call_logs,,
'magic_url': request.get_full_path(),
})