기술블로그-Django편
📘 URL과 Django에서의 & 사용법 + 검색 유지 페이지네이션 패턴 + Q 객체 완전 이해
Chansman
2025. 5. 7. 18:23
📘 URL과 Django에서의 & 사용법 + 검색 유지 페이지네이션 패턴 + Q 객체 완전 이해
✅ 1. &는 URL에서 덧셈이 아니다
많은 사람들이 & 기호를 HTML이나 URL에서 볼 때, "더하기인가?" 하고 오해할 수 있습니다. 하지만 실제로는 전혀 다른 의미입니다.
🔹 &의 진짜 의미
- &는 URL에서 여러 개의 쿼리 파라미터(key=value)를 연결하는 연결자입니다.
- 덧셈도 아니고, 연산도 아니며, 단순히 여러 개의 값을 나열할 때 사용됩니다.
📌 예시
/blog/?page=2&q=장고&sort=latest
파라미터 이름 값
page | 2 |
q | 장고 |
sort | latest |
➡ ?는 쿼리 시작, &는 추가 파라미터 연결 역할입니다.
✅ 2. Django에서 검색어 유지 + 페이지네이션
🔍 예시 코드
<a href="?page=1{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">« 첫번째</a>
🔍 이 코드의 흐름
- 기본 페이지네이션: ?page=1 → 1페이지로 이동
- 검색어가 있을 때만 &q=검색어 추가
- request.GET.q가 존재할 경우 → URL 뒤에 &q=검색어가 붙음
- 최종 URL 예시:
- /blog/?page=1&q=장고
➡ 이렇게 하면 검색 결과를 유지한 채로 페이지를 넘길 수 있습니다.
✅ 동작 원리 요약
구문 의미
request.GET.q | URL 쿼리 파라미터 중 q값 (검색어) |
&q=... | 검색어를 URL에 붙여 페이지 이동시 유지 |
{% if %} 조건문 | 검색어 있을 때만 붙이도록 제어 |
✅ 3. Q 객체란? (복잡한 검색 조건 만들기)
Django에서 filter()는 기본적으로 AND 조건만 지원합니다.
검색 조건이 여러 개이고 그 중 **하나만 만족해도 되는 경우(OR 조건)**는 Q() 객체를 사용해야 합니다.
🔍 예시 코드
q = request.GET.get('q')
if q:
blogs = blogs.filter(
Q(title__icontains=q) | Q(content__icontains=q)
)
✅ 의미 해석
- Q(title__icontains=q) → 제목에 q 포함
- Q(content__icontains=q) → 내용에 q 포함
- | → 둘 중 하나라도 포함되면 통과 (OR 조건)
🔍 AND / OR / NOT 예시
연산자 의미 예시
Q() | 조건 래핑 | Q(title='Python') |
` | ` | OR 조건 |
& | AND 조건 | Q(title='A') & Q(content='B') |
~ | NOT 조건 | ~Q(author='admin') |
📌 Q() 없이 위처럼 OR 조건을 만들 수 없습니다. (기본 .filter()는 AND만 가능)
🧠 최종 요약 정리
구분 의미
& in URL | 여러 파라미터 연결 구분자 (절대 덧셈 아님) |
& in Python | 비트 연산자 (AND) |
&q=... | 검색어 파라미터를 유지하며 페이지네이션에 활용 |
Q() 객체 | Django ORM에서 복잡한 조건 필터링용 도구 |
` | , &, ~` |
이제 &와 Q()의 정확한 역할을 구분하고, 검색과 페이지네이션이 어떻게 협업하는지도 명확하게 이해하셨을 거예요. 😉