Django分页错误

时间:2011-03-22 04:58:29

标签: python django django-models django-templates django-pagination

我创建了一个Django应用程序。我的应用程序中有一个过滤功能。过滤后的数据显示在单独的页面中。

现在我想将Django Pagination提供给已过滤的列表页面。在这样做的时候,我遇到了这个错误。分页显示在页面底部,显示正确的页面数NEXT。

但是在点击分页器中的“下一页”时,它会将我重定向到我的主页(/ employeeList)。

我想这是因为HttpResponseRedirect (return HttpResponseRedirect('/employeeList'))我在filter()内给出了某些情况下使用的def filter(request): val2='' val3='' newData='' if request.GET.has_key('choices'): val2=request.GET.get('choices') if request.GET.has_key('textField'): val3=request.GET.get('textField') if request.POST: val2=request.POST.get('choices') val3=request.POST.get('textField') if val2=='Designation': newData = EmployeeDetails.objects.filter(designation=val3) flag=True elif val2=='Name': newData = EmployeeDetails.objects.filter(userName__icontains=val3) flag=True elif val2=='EmployeeID': newData = EmployeeDetails.objects.filter(employeeID=val3) flag=True elif val2=='Project': newData = EmployeeDetails.objects.filter(project=val3) flag=True elif val2=='DateOfJoin': newData = EmployeeDetails.objects.filter(dateOfJoin=val3) flag=True else: return HttpResponseRedirect('/employeeList') if request.POST.get('sortAscendValue'): newData = newData.order_by('userName') elif request.POST.get('sortDescendValue'): newData = newData.order_by('-userName') paginator = Paginator(newData, 10) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 try: contacts = paginator.page(page) except (EmptyPage, InvalidPage): contacts = paginator.page(0) return render_to_response('filter.html',{'newData':newData,'emp_list': contacts,'val2':val2,'val3':val3,'flag':flag,'emp_list': contacts}) 。我将粘贴我的filter()和HTML以进行分页。

<div class="pagination" >
    <span class="step-links">
        {% if emp_list.has_previous %}
            <a href="?page={{ empl_list.previous_page_numbe }}">Previous</a>
        {% endif %}

        <span class="current">
            Page {{ emp_list.number }} of {{ emp_list.paginator.num_pages }}.
        </span>

        {% if emp_list.has_next %}
            <a href="?page={{ emp_list.next_page_number }}">Next</a>
        {% endif %}
    </span>
</div>

filter.html

{{1}}

2 个答案:

答案 0 :(得分:2)

听起来你已经正确地确定了下一个链接重定向到主页的原因:

  • 下一个链接类似于?page=2
  • 没有choices GET变量且没有POST变量,因此当val2输入您的'' if长语句时,elif将为else: return HttpResponseRedirect('/employeeList')
  • else: return HttpResponseRedirect('/employeeList')将被执行,将用户重定向到您的主页。

我不明白您何时或如何希望您的过滤器代码重定向到主页,但似乎有几个选项:

  • 删除else并在您想要重定向用户时使用不同的条件。

  • 找到一种方法来阻止else条件与下一个链接匹配。

对于第二个选项,您可以在elif request.GET.get('page', False): pass 上方添加以下内容:

{{1}}

这当然不是一个漂亮的解决方案,但如果不重构代码,它似乎是最快(最脏)的选项。

答案 1 :(得分:2)

{% if emp_list.has_next %}
  <a href="?page={{ emp_list.next_page_number }}&choices={{ val2 }}>Next</a>
{% endif %}