📘 URL과 Django에서의 & 사용법 + 검색 유지 페이지네이션 패턴 + Q 객체 완전 이해

2025. 5. 7. 18:23·기술블로그-Django편

📘 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()의 정확한 역할을 구분하고, 검색과 페이지네이션이 어떻게 협업하는지도 명확하게 이해하셨을 거예요. 😉

'기술블로그-Django편' 카테고리의 다른 글

📌 Django 실무 배포 완전 정복 - Gunicorn, Nginx, Docker, AWS 흐름 중심 정리  (0) 2025.05.08
📌 Django 뷰 구성 전략 - CBV vs FBV, 그리고 혼합 전략까지 완벽 비교 정리  (0) 2025.05.08
📘 Django 코드에서 점(.)과 언더스코어(_) 완전 정복  (0) 2025.05.07
📘 Django 페이지네이션: 점(...) 생략 표시 조건 완전 정복  (0) 2025.05.07
📘 Django 페이지네이션 템플릿 코드 완전 정복  (0) 2025.05.07
'기술블로그-Django편' 카테고리의 다른 글
  • 📌 Django 실무 배포 완전 정복 - Gunicorn, Nginx, Docker, AWS 흐름 중심 정리
  • 📌 Django 뷰 구성 전략 - CBV vs FBV, 그리고 혼합 전략까지 완벽 비교 정리
  • 📘 Django 코드에서 점(.)과 언더스코어(_) 완전 정복
  • 📘 Django 페이지네이션: 점(...) 생략 표시 조건 완전 정복
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Python (32)
      • 프로젝트 (110)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    classaction
    titaniumcase
    뷔
    homebartrend
    smartphonedurability
    self-growth
    remittance
    college reunions
    btsreunion
    btsjungkook
    basalcellcarcinoma
    btsdischarge
    hotcoffeecase
    urbantrends
    global politics
    trumpmuskclash
    travel ban
    life reflection
    RM
    youngprofessionals
    chinanightlife
    newpoliticalparty
    bts
    americanlaw
    btscomeback
    chatgpterror
    livebroadcast
    gpterror
    lawsuitculture
    americaparty
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📘 URL과 Django에서의 & 사용법 + 검색 유지 페이지네이션 패턴 + Q 객체 완전 이해
상단으로

티스토리툴바