【问题标题】:Django pagination errorDjango分页错误
【发布时间】:2011-07-20 05:02:49
【问题描述】:

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

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

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

我想这是因为HttpResponseRedirect (return HttpResponseRedirect('/employeeList')) 我在filter() 中给出了在某些情况下使用的filter()。我将粘贴我的 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>

【问题讨论】:

  • 您确定您生成的Next URL 包含?choices=Something 部分吗?
  • 是的......我在另一个地方使用相同的代码,它工作正常

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


【解决方案1】:

试试

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

【讨论】:

  • 解决了我的问题 :) 非常感谢
【解决方案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

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

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 2018-03-01
    • 2017-07-24
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多