Menu
CoddyTech

Zachowanie filtra

Część sekcji Widoki oparte na klasach ścieżki Django w Coddy. Lekcja 9 z 18.

Otwórz oferty pracy w Berlinie i kliknij Dalej: strona 2 zawiera oferty pracy ze wszystkich miast. Link to ?page=2, czyli zupełnie nowy ciąg zapytania, więc city=Berlin znika.

Znacznik {% querystring %} zaczyna od bieżącego ciągu zapytania, ustawia wskazane wartości i zapisuje wynik wraz ze znakiem ?. Jest wbudowany od Django 5.1, więc nie wymaga {% load %}. Lista przepisów filtrowana według kuchni zawiera link do widoku z sortowaniem:

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

Pod adresem /recipes/?cuisine=thai zapisuje ?cuisine=thai&sort=minutes: filtr zostaje zachowany. Wartością może być zmienna szablonu, a None usuwa klucz: {% querystring sort="minutes" page=None %} również wraca do strony 1.

Nie wpisuj ? przed znacznikiem, bo link będzie zaczynać się od ??.

challenge icon

Wyzwanie

Łatwy

W pliku job_list.html spraw, aby oba linki paginacji zachowywały pozostałą część ciągu zapytania:

  • Next na stronie /jobs/?city=Berlin prowadzi do ?city=Berlin&page=2.
  • Previous również zachowuje miasto.
  • Na stronie /jobs/ Next nadal prowadzi do ?page=2.

Naciśnij Run, a następnie Next na liście ofert pracy w Berlinie.

Spróbuj swoich sił

{% 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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Widoki oparte na klasach

Poćwicz samodzielnie: Edytor online Django