Question

J'ai créé une application Django.Il existe une fonctionnalité de filtrage dans mon application.Les données filtrées sont affichées sur une page distincte.

Maintenant, je veux donner Django Pagination à la page de liste filtrée.En le faisant, je suis tombé sur cette erreur.La pagination est affichée en bas de la page avec le nombre correct de pages SUIVANT.

Mais en cliquant sur «Page suivante» dans le paginateur, il me redirige vers ma page d'accueil (/ employeeList).

Je suppose que c'est à cause d'un HttpResponseRedirect (return HttpResponseRedirect('/employeeList')) que je donne à l'intérieur du filter() qui est utilisé dans certains cas.Je vais coller mon filtre () et le HTML pour la pagination.

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>

Était-ce utile?

La solution

essayez

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

Autres conseils

Il semble que vous ayez déjà correctement identifié la raison pour laquelle le lien suivant redirige vers la page d'accueil:

  • Le lien suivant sera quelque chose comme ?page=2
  • Il n'y a pas de variable choices GET et il n'y a pas de variables POST, donc val2 sera '' quand il entrera votre longue instruction if elif.
  • else: return HttpResponseRedirect('/employeeList') sera exécuté, redirigeant l'utilisateur vers votre page d'accueil.

Je ne comprends pas quand ni comment vous voudriez que votre code de filtre soit redirigé vers la page d'accueil, mais il semble qu'il y ait deux options:

  • Supprimez le else: return HttpResponseRedirect('/employeeList') et utilisez des conditions différentes lorsque vous souhaitez rediriger l'utilisateur.

  • Trouvez un moyen d'empêcher cette condition else de correspondre au lien suivant.

Pour la deuxième option, vous pouvez ajouter ce qui suit au-dessus de votre else:

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

Ce n'est certainement pas une jolie solution, mais cela semble être l'option la plus rapide (et la plus sale) sans refactoriser votre code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top