Den Filter beibehalten
Teil des Abschnitts Klassenbasierte Views der Django-Journey von Coddy. Lektion 9 von 18.
Öffne die Stellenangebote in Berlin und klicke auf „Weiter“: Auf Seite 2 werden Stellenangebote aus allen Städten aufgelistet. Der Link lautet ?page=2, eine völlig neue Query-Zeichenfolge, sodass city=Berlin verloren geht.
Das Tag {% querystring %} geht von der aktuellen Query-Zeichenfolge aus, setzt die von dir angegebenen Werte und gibt das Ergebnis aus, einschließlich ?. Es 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 es ?cuisine=thai&sort=minutes aus: Der Filter bleibt erhalten. Ein Wert kann eine Template-Variable sein, und None entfernt einen Schlüssel: Mit {% querystring sort="minutes" page=None %} gelangst du ebenfalls zurück zu Seite 1.
Schreibe kein ? vor das Tag, sonst beginnt der Link mit ??.
Aufgabe
EinfachFüge in job_list.html bei beiden Paginierungslinks die übrigen Abfrageparameter hinzu:
Nextauf/jobs/?city=Berlinführt zu?city=Berlin&page=2.Previousbehält ebenfalls die Stadt bei.- Auf
/jobs/führtNextweiterhin zu?page=2.
Drücke auf „Run“ und anschließend bei den Berliner Stellen auf „Next“.
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 %}
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