🔍 Django에서 'results = ...' 와 {'results': results}가 왜 둘 다 나오나요?
Django의 render() 함수 안에 다음과 같은 코드가 자주 보입니다:
results = SomeModel.objects.filter(name__icontains=keyword)
return render(request, "partials/search_results.html", {"results": results})
👀 언뜻 보면 "results가 왜 두 번 나오지?" 하는 의문이 들 수 있어요. 하지만 각각 역할이 다릅니다.
✅ 1. 코드 흐름 분석
✔️ results = ...
- 이는 서버 내부에서 사용하는 변수명입니다.
- SomeModel.objects.filter(...)의 결과(QuerySet)를 results 변수에 담은 것.
✔️ {"results": results}
- 이는 템플릿에 넘겨줄 context 딕셔너리입니다.
- 왼쪽 "results"는 템플릿에서 쓸 이름, 오른쪽 results는 위에서 만든 파이썬 변수입니다.
즉, context는 아래와 같이 해석됩니다:
context = {
"템플릿에서 사용할 변수명": 내부에서 정의한 파이썬 변수
}
📌 2. 템플릿에서는 이렇게 사용됩니다
{% for item in results %}
<p>{{ item.name }}</p>
{% endfor %}
- 여기서 results는 context 딕셔너리의 키에 해당합니다.
- 서버에서 넘겨준 QuerySet(results)을 템플릿에서 반복 출력하는 방식이죠.
🔄 이름이 꼭 같아야 할까?
아니요! 이름은 자유롭게 지정할 수 있어요:
found_items = SomeModel.objects.filter(...)
return render(request, "template.html", {"results": found_items})
이렇게 해도 문제 없습니다. 템플릿에서는 {{ results }}로 접근하면 되고, 내부 변수는 어떤 이름을 써도 됩니다.
⚠️ 실수 방지 포인트
구분 설명
서버 내부 변수 | 파이썬 코드에서 처리되는 데이터 (ex. results) |
템플릿 키 | 템플릿에서 사용할 이름 (ex. "results") |
이름이 같을 경우 | 혼란을 줄일 수 있어 자주 그렇게 설정함 |
🎯 요약
results가 두 번 나오는 이유는 하나는 파이썬 변수, 하나는 템플릿 변수명으로 쓰이기 때문입니다.
둘은 같아도 되고, 달라도 되며 목적에 따라 자유롭게 사용하면 됩니다 💡
'기술블로그-Django편' 카테고리의 다른 글
📌 Django REST Framework(DRF)란? (0) | 2025.05.15 |
---|---|
🧠 Django 클래스 기반 뷰(CBV)의 속성들, 왜 쓰는지 헷갈린다면? (0) | 2025.05.15 |
🔍 Django ORM 쿼리 최적화 - select_related vs prefetch_related (0) | 2025.05.14 |
📂 Django에서 MEDIA_URL과 MEDIA_ROOT 설정 완벽 이해하기 (0) | 2025.05.14 |
✅ Django에서 User 모델을 참조하는 두 가지 방식 비교 (0) | 2025.05.14 |