Django Paginator没有超出第一页

时间:2010-10-28 17:54:21

标签: python django pagination

正如标题中所提到的,当我点击进入第一页以外的页面时,我的分页器没有显示任何内容。 首先,让我描述一下我的页面:
它的功能是从用户那里获得一个请求输入,指定他希望看到一堆“通话记录”以及其他过滤器的周期间隔(这很重要)。所以基本上是请求的开始和结束日期,我用它来过滤我的对象。 “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? 谢谢。

2 个答案:

答案 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(),
                           })