0

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

现在我想把Django分页给过滤的列表页面。在做这件事时,我遇到了这个错误。分页显示在页面底部,显示正确的页数NEXT。

虽然点击paginator中的'Next Page'会将我重定向到我的主页(/ employeeList)。

我想这是因为HttpResponseRedirect (return HttpResponseRedirect('/employeeList'))我在filter()里给出了一些情况下使用的。我会粘贴我的过滤器()和HTML分页。

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> 
+2

。您确定要生成的'Next' URL有'?选择= Something'一部分? – 2011-03-22 06:18:55

+0

是的...我在另一个地方使用相同的代码,它工作正常 – 2011-03-22 06:31:03

+0

非常感谢Mithun :) – 2011-03-22 06:54:10

回答

2

尝试

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

修复了我的问题:)非常感谢 – 2011-03-22 06:56:10

+0

绝对是正确的解决方案。 – dgel 2011-03-22 06:58:12

2

这听起来像你已经正确识别的原因,未来链接重定向到主页:

  • 下一个链接将会像?page=2
  • 没有choices GET变量和th因为val2将会是'',当它输入您的长ifelif声明。
  • else: return HttpResponseRedirect('/employeeList')将被执行,将用户重定向到您的主页。

我不明白的时候,或者你会希望你的过滤器的代码重新定向到主页,但它似乎有几个选项:

  • 取出else: return HttpResponseRedirect('/employeeList')并使用不同的条件时,你想重定向用户。

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

对于第二个选项,你可以添加上面下面你else

elif request.GET.get('page', False): 
    pass 

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

+0

非常感谢dgel :) – 2011-03-22 06:54:36