기술블로그-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>

🔍 이 코드의 흐름

  1. 기본 페이지네이션: ?page=1 → 1페이지로 이동
  2. 검색어가 있을 때만 &q=검색어 추가
    • request.GET.q가 존재할 경우 → URL 뒤에 &q=검색어가 붙음
  3. 최종 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()의 정확한 역할을 구분하고, 검색과 페이지네이션이 어떻게 협업하는지도 명확하게 이해하셨을 거예요. 😉