Django 프론트& 백엔드 개발

URL Name을 활용한 템플릿 태그 사용법

Data Jun 2026. 1. 10. 15:12

Django에서 템플릿을 작성하다 보면
아래와 같은 문법을 자연스럽게 사용하게 된다.

{% url 'post-detail' post.id %}

처음에는 이 문법이 조금 낯설지만,
개념을 알고 나면 URL 관리와 유지보수가 훨씬 쉬워진다.

 

1. URL name이란?

Django에서는 URL 패턴에 이름(name) 을 붙일 수 있다.

# posts/urls.py
path('', views.post_list, name='post-list'),
path('<int:post_id>/', views.post_detail, name='post-detail'),

여기서 name='post-detail' 이 바로 URL의 별명이다.

실제 경로: /posts/2/ 와 별명: 'post-detail'

 

2. 왜 URL name을 쓰는가?

만약 템플릿에서 URL을 직접 쓰면:

<a href="/posts/2/">글 제목</a>

나중에 URL 구조가 바뀌면 모든 템플릿을 수정해야 한다.

하지만 name을 사용하면:

<a href="{% url 'post-detail' post.id %}">

URL 구조가 바뀌어도 urls.py만 수정하면 됨 ( 유지보수성이 훨씬 좋아진다.)

 

3. {% url %} 템플릿 태그란?

{% url %} 은 URL name을 실제 URL 문자열로 변환해주는 템플릿 태그다.

{% url 'post-detail' post.id %}

이건 Django에게 이렇게 말하는 것과 같다.

“post-detail 이라는 이름의 URL에
post.id 값을 넣어서
실제 URL을 만들어줘”

 

4. 인자가 있는 URL의 경우

path('<int:post_id>/', views.post_detail, name='post-detail')

이 URL은 post_id 값을 반드시 필요로 한다.

그래서 템플릿에서는:

{% url 'post-detail' post.id %}

처럼 인자를 함께 전달해야 한다.

 

5. 정리하면

  • name은 URL의 별명
  • {% url %} 은 그 별명을 실제 URL로 변환
  • 템플릿에서는 하드코딩된 URL을 쓰지 않는 게 정석
  • URL 변경에 강한 구조를 만들 수 있다