기술블로그-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 태그로 만드는 습관을 들이세요! 😉