Django 프론트& 백엔드 개발

URL, View, Template의 관계 정리

Data Jun 2026. 1. 4. 13:17

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의 역할이 한 번에 정리됐다.