Django를 처음 공부하면서 가장 헷갈렸던 부분은
href에 쓰는 경로와 render()에 쓰는 경로가 왜 다른지였다.
<a href="/foods/index/">돌아가기</a>
return render(request, "foods/index.html")
처음에는
“둘 다 경로처럼 보이는데, 왜 하나는 URL이고 하나는 HTML 파일 이름일까?”
라는 생각이 들었다.
1. 핵심은: HTML 파일은 직접 접근 대상이 아니다
Django에서는 HTML(template)을 직접 요청하지 않는다.
항상 다음 흐름을 따른다.
브라우저 요청 (href)
↓
urls.py
↓
view 함수
↓
template 렌더링
즉,
- <a href="..."> → URL 요청
- urls.py → 어떤 view를 실행할지 결정
- view → 어떤 template을 렌더링할지 결정
HTML 파일은 view가 선택해서 전달하는 결과물일 뿐이다.
그래서 이렇게 쓰는 게 맞다
❌ 잘못된 생각
<a href="/foods/index.html">
→ HTML 파일을 직접 요청하려는 시도
→ Django 구조와 맞지 않음
⭕ Django 방식
<a href="/foods/index/">
path("index/", views.index)
return render(request, "foods/index.html")
URL은 view를 가리키고,
view가 template을 렌더링한다.
2. 정리하면
Django에서는
URL → View → Template
이 구조로 무조건 동작한다.
- href는 URL을 부른다
- URL은 view를 실행한다
- view가 template을 렌더링한다
이렇게 이해하니
URL, view, template의 역할이 한 번에 정리됐다.
'Django 프론트& 백엔드 개발' 카테고리의 다른 글
| [Model] Django Migration 개념 정리 (0) | 2026.01.04 |
|---|---|
| [Model] 데이터 모델링과 마이그레이션 흐름 정리 (0) | 2026.01.04 |
| Django의 get_static_prefix 개념 (0) | 2026.01.04 |
| Django에서 동적 URL(Dynamic URL) 사용하기 (0) | 2026.01.04 |
| 데이터 전달로 동적 웹 페이지 개념 (0) | 2026.01.04 |