Menu
CoddyTech

Den Filter beibehalten

Teil des Abschnitts Klassenbasierte Views der Django-Journey von Coddy. Lektion 9 von 18.

Öffne die Berliner Stellenangebote und klicke auf „Weiter“: Seite 2 listet Stellenangebote aus allen Städten auf. Der Link lautet ?page=2, eine völlig neue Abfragezeichenfolge, daher ist city=Berlin verschwunden.

Der Tag {% querystring %} geht von der aktuellen Abfragezeichenfolge aus, setzt die Werte, die du angibst, und gibt das Ergebnis aus, einschließlich ?. Er ist seit Django 5.1 integriert und benötigt daher kein {% load %}. Eine nach Küche gefilterte Rezeptliste verlinkt auf eine sortierte Ansicht:

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

Unter /recipes/?cuisine=thai gibt der Tag ?cuisine=thai&sort=minutes aus: Der Filter bleibt erhalten. Ein Wert kann eine Vorlagenvariable sein, und None entfernt einen Schlüssel: {% querystring sort="minutes" page=None %} führt ebenfalls zurück zu Seite 1.

Schreibe kein ? vor den Tag, sonst beginnt der Link mit ??.

challenge icon

Aufgabe

Einfach

Sorge in job_list.html dafür, dass beide Paginierungslinks den Rest der Abfragezeichenfolge beibehalten. Unter /jobs/?city=Berlin führt Next zu ?city=Berlin&page=2, und Previous behält ebenfalls die Stadt bei. Unter /jobs/ führt Next weiterhin zu ?page=2.

Klicke auf Berlin und dann auf Next: Auf Seite 2 werden nur Jobs in Berlin angezeigt.

Probier es selbst

{% 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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Klassenbasierte Views

Übe selbstständig: Django-Playground