【问题标题】:Django Paginator not working beyond first pageDjango Paginator 不能超出第一页
【发布时间】:2011-05-02 00:54:57
【问题描述】:

如标题中所述,当我单击转到第一个页面之外的页面时,我的分页器不显示任何内容。 首先,让我大致描述一下我的页面:
它的功能是从用户那里获取一个请求输入,指定他想要查看一堆“通话记录”以及其他过滤器的时间间隔(这很重要)。所以基本上有一个请求的开始和结束日期,我用它来过滤我的对象。 “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,只是分页器部分,非常标准,取自文档:

                {% 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? 谢谢。

【问题讨论】:

    标签: python django pagination


    【解决方案1】:

    如果我理解正确,您可以从请求对象添加到上下文的完整路径:

    return render_to_response('xxxx.html', 
                              {'queryset': queryset,
                               'filter_form': filter_form,
                               'call_logs': call_logs,,
                               'magic_url': request.get_full_path(),
                               })
    

    【讨论】:

    • 在看到您的答案之前,我手动执行了“magic_url”,获取每个请求并将所有内容连接在一起......我会采用您的解决方案,因为它可以完成工作。我应该注意 Eclipse 的 Pydev 代码完成。
    【解决方案2】:

    我的问题是如何获得 使用 django 的当前窗口 URL 模板而不是javascript?谢谢 你。

    不需要正确的方法,但你可以检查这个post

    但我建议您不要将过滤器与分页混合使用。

    您可以在进行过滤时使用 AJAX,您可以创建一个单独处理过滤的新函数,或者您可以只使用相同的函数并测试 if request.is_ajax(): ,就像当用户过滤包含时您将拥有您的过滤器URL 中的数据 (start_date,end_date)。

    现在,当用户想要传递到下一页时,您已经在 url 中有过滤参数,您可以使用它来创建将传递给 Paginator 的查询集。

    为了处理 javascript not active,您可以用简单的 POST 表单替换 AJAX,记住不要将过滤与分页混为一谈 :)

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2019-09-30
      • 2021-04-23
      相关资源
      最近更新 更多