기술블로그-Django편

📌 Django {% url %} 태그 완전 가이드 - URL 생성의 모든 것

Chansman 2025. 5. 7. 15:07

📌 Django {% url %} 태그 완전 가이드 - URL 생성의 모든 것


✅ 1. {% url %} 태그란?

Django 템플릿에서 URLConf에 등록된 URL 경로를 템플릿 내에서 생성할 수 있도록 도와주는 태그입니다.

<a href="{% url 'view_name' %}">링크</a>

➡ URL을 직접 문자열로 적는 것이 아니라, view 이름(name)으로 지정하여 유지 보수성과 안정성 향상


✅ 2. 기본 사용법

🔹 URLConf 예시 (urls.py):

path('<int:pk>/update/', views.blog_update, name='blog_update')

🔹 템플릿에서 사용:

<a href="{% url 'blog_update' blog.pk %}">수정</a>   <!-- 위치 인자 방식 -->
<a href="{% url 'blog_update' pk=blog.pk %}">수정</a> <!-- 키워드 인자 방식 -->

✅ 3. 위치 인자 vs 키워드 인자

구분 문법 특징

위치 인자 {% url 'view_name' 값 %} 짧고 간단하지만 순서가 중요함
키워드 인자 {% url 'view_name' 키=값 %} 명확하고 순서 상관 없음

예시 비교:

<!-- 위치 인자 방식 -->
<a href="{% url 'blog_detail' blog.pk %}">보기</a>

<!-- 키워드 인자 방식 -->
<a href="{% url 'blog_detail' pk=blog.pk %}">보기</a>

🔁 4. 다중 인자 URL 예시

URLConf:

path('category/<slug:category_slug>/post/<int:pk>/', views.post_detail, name='post_detail')

템플릿:

<!-- 위치 인자 방식 -->
<a href="{% url 'post_detail' post.category.slug post.pk %}">자세히 보기</a>

<!-- 키워드 인자 방식 -->
<a href="{% url 'post_detail' category_slug=post.category.slug pk=post.pk %}">자세히 보기</a>

🧠 5. 장점 요약

항목 설명

유지 보수 URL 구조가 바뀌어도 name만 유지하면 안전
코드 재사용 여러 템플릿에서 재활용 가능
리팩토링 용이 하드코딩된 경로보다 훨씬 유연함

 

💡 6. reverse() 함수와의 차이점 보완

reverse()는 Python 코드에서 URL을 생성할 때 사용함:

reverse('blog_detail', kwargs={'pk': 3})  # ✅ 명확
reverse('blog_detail', None, None, {'pk': 3})  # ✅ 가능하지만 ❌ 권장하지 않음
방식 작동 여부 설명
reverse('name', kwargs={'pk': 3}) ✅ 정상 kwargs를 명시한 키워드 인자 방식
reverse('name', {'pk': 3}) ❌ 오류 위치 인자 순서가 틀려서 urlconf로 처리됨
reverse('name', None, None, {'pk': 3}) ✅ 가능 모든 위치 인자 순서대로 넣은 경우지만 실무 비권장

reverse()는 Python 함수이므로 정해진 인자 순서와 이름을 지켜야 합니다.
템플릿의 {% url %} 태그와 달리, reverse()는 중간 인자를 생략할 경우 반드시 키워드 인자를 써야 안정적입니다.


✅ 7. 유의사항

  • 인자 누락 시 NoReverseMatch 오류 발생
  • name=이 설정되지 않은 URL 패턴은 사용할 수 없음
  • {% url %} 태그는 {% load static %}처럼 별도 로드 없이 기본 내장됨

✅ 8. 결론

  • {% url %}은 Django 템플릿에서 URL을 안전하고 유연하게 만드는 가장 중요한 도구
  • 인자 개수와 복잡도에 따라 위치 인자 또는 키워드 인자 선택
  • Python 코드에서는 reverse() 함수 사용 시 키워드 인자 권장

모든 템플릿 링크를 하드코딩 대신 url 태그로 만드는 습관을 들이세요! 😉