Django 개발자들의 오랜 고민, 드디어 해결되다
웹 애플리케이션을 개발할 때 필터, 검색, 페이지네이션 기능을 구현하며 가장 자주 겪는 문제가 있다. 바로 URL 쿼리 파라미터를 유지하면서 일부만 수정하거나 추가하는 것이다. 이처럼 단순해 보이는 작업이 Django 템플릿 내에서는 꽤나 번거롭고 비효율적인 코드 작성을 요구해왔다.
하지만 Django 5.1의 새로운 기능, {% querystring %} 템플릿 태그가 이러한 문제를 해결해준다. 이제 템플릿에서 URL 쿼리 문자열을 더욱 직관적이고 간단하게 다룰 수 있게 된 것이다. 이번 블로그에서는 이 기능이 어떤 문제를 해결하며, 어떻게 사용하는지, 그리고 실무에서 어떤 장점을 가지는지 소개한다.
Django 템플릿의 오래된 문제
제품 목록을 보여주는 페이지를 떠올려보자. 사용자는 색상, 사이즈, 카테고리와 같은 여러 필터를 설정한 상태로 특정 페이지를 보고 있다. 이후 다음 페이지로 넘어가고자 할 때, 현재 필터 설정은 그대로 유지한 채 페이지 번호만 바꾸고 싶다. 이런 상황은 상당히 흔하다.
기존 Django에서는 이러한 URL을 템플릿에서 조작하기 위해 for 반복문과 if 조건문을 조합해 복잡한 쿼리 문자열을 수동으로 구성해야 했다. 이 방식은 다음과 같은 문제를 낳았다.
- 템플릿 코드가 지나치게 복잡하고 길어져 가독성이 떨어짐
- 유지보수가 어렵고 실수할 가능성이 높음
- 일관된 코드 작성이 어려워 개발자마다 다른 방식으로 구현됨
이처럼 간단한 URL 처리 하나에도 많은 노력이 필요했던 것이 현실이었다.
{% querystring %} 템플릿 태그의 도입
Django 5.1은 {% querystring %}이라는 새로운 템플릿 태그를 도입하며 위 문제를 해결했다. 이 태그는 템플릿에서 현재 URL의 쿼리 파라미터를 손쉽게 수정하거나 제거할 수 있도록 지원한다.
기본적으로 이 태그는 현재 URL에 포함된 쿼리 파라미터를 유지하면서, 개발자가 지정한 파라미터만 덮어쓰거나 추가한다. None 값을 지정하면 해당 파라미터는 URL에서 제거된다. 또한 리스트 형태의 값도 자연스럽게 처리할 수 있어 필터링 기능과도 잘 어울린다.
실무에서의 활용 예시
필터와 페이지네이션이 혼합된 상품 목록
색상, 사이즈, 카테고리 등 다양한 필터와 함께 페이지 이동 기능이 포함된 페이지에서, {% querystring %} 태그를 이용하면 기존 필터를 유지하면서 페이지 번호만 바꾸는 것이 매우 간단해진다.
또한 특정 필터만 제거하고 싶은 경우에도 None 값을 활용해 불필요한 조건 없이 URL을 깔끔하게 조작할 수 있다.
검색과 정렬 기능이 있는 페이지
검색 결과를 정렬하는 UI에서는 검색어를 유지한 채 정렬 기준만 변경하거나, 반대로 정렬 기준은 유지한 채 검색어만 초기화하는 작업이 자주 필요하다. 이 역시 태그 하나로 해결 가능하다.
HTMX 기반의 동적 UI 구현
HTMX를 활용한 동적 페이지 구성에서도 이 태그는 큰 도움이 된다. 필터 버튼 클릭 시 페이지 전체를 리로드하지 않고 특정 영역만 갱신하면서도 URL은 동기화되어 사용자가 북마크하거나 뒤로 가기를 눌러도 예상대로 동작하게 된다.
템플릿 코드 재사용성 향상
생성된 URL을 템플릿 변수에 저장해 여러 곳에서 재사용할 수 있다. 이렇게 하면 중복 처리를 줄이고 성능도 개선할 수 있다. 특히 하나의 URL을 여러 버튼이나 링크에서 사용하는 경우 유용하다.
사용을 위한 필수 조건
{% querystring %} 태그를 사용하기 위해서는 다음 두 가지 조건을 충족해야 한다.
- Django 5.1 이상 버전이 설치되어 있어야 한다.
- request 컨텍스트 프로세서가 설정에 포함되어 있어야 한다.
이는 해당 태그가 기본적으로 request.GET 값을 사용하기 때문이다.
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'OPTIONS': {
'context_processors': [
'django.template.context_processors.request',
# ... 기타 설정
],
},
},
]
Django 템플릿 개발의 새로운 기준
Django 5.1에서 도입된 {% querystring %} 템플릿 태그는 URL 쿼리 문자열을 조작하는 방식에 있어서 새로운 기준을 제시한다. 복잡하고 반복적인 코드를 대체하며, 코드의 가독성과 유지보수성을 크게 높여준다.
검색 필터링, 정렬, 페이지네이션, HTMX 연동 등 다양한 상황에서 활용할 수 있으며, 실제 현업 개발자들의 피드백을 반영해 설계된 기능이라는 점에서도 큰 의미가 있다.
아직 Django 5.1로 업그레이드하지 않았다면, 이 기능 하나만으로도 충분히 업그레이드를 고려해볼 만하다. 템플릿 코드가 더욱 간결해지고, 사용자 경험도 더 좋아질 것이다.
Django 개발자라면 반드시 알아두어야 할 기능 중 하나로, {% querystring %} 템플릿 태그는 향후 많은 프로젝트에서 표준처럼 사용될 가능성이 크다. URL 처리의 복잡함에서 벗어나, 더 나은 웹 애플리케이션 개발에 집중할 수 있는 환경이 마련됐다.
Django 5.1’s Game-Changing QueryString Template Tag: Finally, URL Parameters Made Easy
How Django 5.1 solved one of web development’s most persistent template challenges
medium.com
'Python' 카테고리의 다른 글
Flake8, isort, Black을 대체할 단 하나의 선택 – 초고속 Python 린터 Ruff 소개 (0) | 2025.07.01 |
---|---|
Python 3.14, 드디어 GIL을 벗어나다: 프리-스레딩 빌드의 모든 것 (0) | 2025.06.17 |
파이썬 출력 포맷팅: 깔끔하고 읽기 쉬운 출력물 만드는 법 (0) | 2025.06.09 |
Pandas가 NumPy를 버린 이유: PyArrow가 바꾸는 데이터 분석의 속도 게임 (0) | 2025.05.31 |
타입 체커의 진화: Pyrefly vs Ty, 파이썬을 위한 새로운 선택지 (0) | 2025.05.30 |