Menu
CoddyTech

Conserver le filtre

Fait partie de la section Vues basées sur des classes du Journey Django de Coddy. Leçon 9 sur 18.

Ouvrez les offres d’emploi de Berlin et appuyez sur Suivant : la page 2 répertorie des offres de toutes les villes. Le lien est ?page=2, une toute nouvelle chaîne de requête, donc city=Berlin a disparu.

La balise {% querystring %} part de la chaîne de requête actuelle, définit les valeurs que vous indiquez et écrit le résultat, ? inclus. Elle est intégrée depuis Django 5.1 et ne nécessite donc aucun {% load %}. Une liste de recettes filtrée par cuisine renvoie vers une vue triée :

<a href="{% querystring sort="minutes" %}">Quickest first</a>

Sur /recipes/?cuisine=thai, elle écrit ?cuisine=thai&sort=minutes : le filtre est conservé. Une valeur peut être une variable de modèle, et None supprime une clé : {% querystring sort="minutes" page=None %} revient également à la page 1.

N’écrivez pas de ? avant la balise, sinon le lien commencera par ??.

challenge icon

Défi

Facile

Dans job_list.html, faites en sorte que les deux liens de pagination conservent le reste de la chaîne de requête :

  • Next sur /jobs/?city=Berlin mène à ?city=Berlin&page=2.
  • Previous conserve aussi la ville.
  • Sur /jobs/, Next mène toujours à ?page=2.

Cliquez sur Run, puis sur Next pour les offres d’emploi à Berlin.

Essayez vous-même

{% extends "jobs/base.html" %}

{% block title %}Jobs{% endblock %}

{% block content %}
  <h1>Jobs</h1>
  <p class="cities">
    <a href="{% url 'jobs:list' %}">All cities</a>
    <a href="?city=Berlin">Berlin</a>
    <a href="?city=Lisbon">Lisbon</a>
    <a href="?city=London">London</a>
  </p>
  <ul class="jobs">
    {% for job in jobs %}
      <li class="job">
        <a href="{% url 'jobs:detail' job.slug %}"><strong>{{ job.title }}</strong></a>
        at {{ job.company }}, {{ job.city }}
      </li>
    {% empty %}
      <li>No jobs yet.</li>
    {% endfor %}
  </ul>

  {% if is_paginated %}
    <nav class="pages">
      {% if page_obj.has_previous %}
        <a href="?page={{ page_obj.previous_page_number }}">Previous</a>
      {% endif %}
      <span>Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</span>
      {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}">Next</a>
      {% endif %}
    </nav>
  {% endif %}
{% endblock %}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Vues basées sur des classes

Entraînez-vous par vous-même : Playground Django