Menu
CoddyTech

Mantendo o filtro

Parte da seção Views baseadas em classes do Journey de Django da Coddy. Lição 9 de 18.

Abra as vagas de Berlim e pressione Próxima: a página 2 lista vagas de todas as cidades. O link é ?page=2, uma nova string de consulta completa, então city=Berlin desaparece.

A tag {% querystring %} começa com a string de consulta atual, define os valores que você indicar e escreve o resultado, incluindo ?. Ela vem integrada desde o Django 5.1, então não precisa de {% load %}. Uma lista de receitas filtrada por culinária leva a uma visualização ordenada:

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

Em /recipes/?cuisine=thai, ela escreve ?cuisine=thai&sort=minutes: o filtro é mantido. Um valor pode ser uma variável de template, e None remove uma chave: {% querystring sort="minutes" page=None %} também volta à página 1.

Não escreva ? antes da tag, ou o link começará com ??.

challenge icon

Desafio

Fácil

Em job_list.html, faça com que os dois links de paginação mantenham o restante da string de consulta:

  • Next em /jobs/?city=Berlin leva a ?city=Berlin&page=2.
  • Previous também mantém a cidade.
  • Em /jobs/, Next ainda leva a ?page=2.

Clique em Run e depois em Next nos empregos de Berlin.

Experimente você mesmo

{% 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 seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Views baseadas em classes

Pratique por conta própria: Playground de Django