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