Menu
CoddyTech

필터 유지하기

Coddy Django 여정의 클래스 기반 뷰 섹션에 포함된 레슨. 18개 중 9번째.

베를린의 채용 공고를 열고 다음을 누르세요. 2페이지에는 모든 도시의 채용 공고가 표시됩니다. 링크는 ?page=2로, 완전히 새로운 쿼리 문자열이므로 city=Berlin은 사라집니다.

{% querystring %} 태그는 현재 쿼리 문자열을 바탕으로, 지정한 값을 설정하고 ?를 포함한 결과를 출력합니다. Django 5.1부터 기본 제공되므로 {% load %}가 필요 없습니다. 요리 종류로 필터링된 레시피 목록에서 정렬된 보기로 연결하는 예입니다.

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

/recipes/?cuisine=thai에서는 ?cuisine=thai&sort=minutes를 출력하므로 필터가 유지됩니다. 값으로 템플릿 변수를 사용할 수 있으며, None은 키를 제거합니다. {% querystring sort="minutes" page=None %}을 사용하면 1페이지로 돌아갑니다.

태그 앞에 ?를 쓰지 마세요. 링크가 ??로 시작하게 됩니다.

challenge icon

챌린지

쉬움

job_list.html에서 페이지네이션 링크 두 개 모두 나머지 쿼리 문자열을 유지하도록 하세요:

  • /jobs/?city=Berlin에서 Next를 누르면 ?city=Berlin&page=2로 이동합니다.
  • Previous를 눌러도 도시가 유지됩니다.
  • /jobs/에서는 Next를 눌러도 계속 ?page=2로 이동합니다.

Run을 누른 다음 Berlin 일자리 목록에서 Next를 누르세요.

직접 해보기

{% 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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

클래스 기반 뷰의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드