Django ошибка нумерации страниц - PullRequest
0 голосов
/ 22 марта 2011

Я создал приложение Django. В моем приложении есть функция фильтрации. Отфильтрованные данные отображаются на отдельной странице.

Теперь я хочу добавить Django Pagination на отфильтрованную страницу списка. Делая это, я вошел в эту ошибку. Нумерация страниц показана внизу страницы с указанием правильного количества страниц СЛЕДУЮЩАЯ.

Но при нажатии на «Следующая страница» в paginator он перенаправляет меня на мою домашнюю страницу (/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 ]

2 голосов
/ 22 марта 2011

попробуй

{% if emp_list.has_next %}
  <a href="?page={{ emp_list.next_page_number }}&choices={{ val2 }}>Next</a>
{% endif %}
2 голосов
/ 22 марта 2011

Похоже, вы уже правильно определили причину, по которой следующая ссылка перенаправляет на домашнюю страницу:

  • Следующая ссылка будет выглядеть примерно так: ?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

Это, конечно, не очень хорошее решение, но похоже,самый быстрый (и самый грязный) вариант без рефакторинга вашегоКод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...