Menu
CoddyTech

Mantenere il filtro

Fa parte della sezione View basate su classi del percorso Django di Coddy. Lezione 9 di 18.

Apri gli annunci di lavoro di Berlino e premi Avanti: la pagina 2 elenca gli annunci di lavoro di tutte le città. Il link è ?page=2, una nuova stringa di query completa, quindi city=Berlin scompare.

Il tag {% querystring %} parte dalla stringa di query corrente, imposta i valori che indichi e scrive il risultato, compreso ?. È integrato a partire da Django 5.1, quindi non ha bisogno di {% load %}. Un elenco di ricette filtrato per cucina rimanda a una vista ordinata:

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

Su /recipes/?cuisine=thai scrive ?cuisine=thai&sort=minutes: il filtro viene mantenuto. Un valore può essere una variabile di template, e None rimuove una chiave: anche {% querystring sort="minutes" page=None %} torna alla pagina 1.

Non scrivere ? prima del tag, altrimenti il link inizia con ??.

challenge icon

Sfida

Facile

In job_list.html, fai in modo che entrambi i link di paginazione mantengano il resto della stringa di query:

  • Next su /jobs/?city=Berlin porta a ?city=Berlin&page=2.
  • Previous mantiene anche la città.
  • Su /jobs/, Next porta ancora a ?page=2.

Premi Run e poi Next per le offerte di lavoro a Berlino.

Provalo tu

{% 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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di View basate su classi

Esercitati da solo: Playground Django