Django分页

2024-09-28 01:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我想这是因为在某些情况下,我在filter()中给出了一个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})

过滤器.html

^{pr2}$

Tags: truegetifobjectsrequestpagefilterpost
2条回答

试试看

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

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

  • 下一个链接将类似于?page=2
  • 没有choicesGET变量,也没有POST变量,因此val2在进入长ifelif语句时将是{}。在
  • else: return HttpResponseRedirect('/employeeList')将被执行,将用户重定向到您的主页。在

我不知道您希望何时或如何将筛选代码重定向到主页,但似乎有几个选项:

  • 删除else: return HttpResponseRedirect('/employeeList')并在要重定向用户时使用不同的条件。

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

对于第二个选项,您可以在else上方添加以下内容:

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

这当然不是一个很好的解决方案,但它似乎是最快的(也是最脏的)不需要重构代码的选项。在

相关问题 更多 >

    热门问题