오늘의 TIL: Django의 URL 패턴 정리
오늘은 Django에서 URL을 설정하는 방법에 대해 학습했다. Django의 URL 패턴은 웹 애플리케이션의 엔드포인트를 정의하는 중요한 부분이며, 이를 통해 사용자의 요청을 적절한 뷰 함수 또는 클래스에 매핑할 수 있다.
1. 기본적인 URL 설정
Django 프로젝트에서는 urls.py 파일을 활용해 URL을 정의한다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'), # 기본 홈 페이지
path('about/', views.about, name='about'), # 'about/' URL 패턴
]
- path('', views.home, name='home')
- 빈 문자열('')은 루트 URL을 의미.
- views.home은 요청이 들어왔을 때 실행할 뷰 함수.
- name='home'은 URL 패턴에 이름을 지정하여 템플릿에서 쉽게 참조할 수 있도록 함.
2. URL 패턴에 동적 경로 추가하기
URL에서 동적인 값을 받아와 뷰에서 처리할 수 있다.
path('post/<int:id>/', views.post_detail, name='post_detail'),
- <int:id>는 정수형 id 값을 URL에서 추출하여 뷰 함수에 전달.
- 예: /post/5/ → views.post_detail(request, id=5)
3. include()를 사용한 URL 분리
대규모 프로젝트에서는 앱별로 URL을 모듈화할 수 있다.
프로젝트의 urls.py:
from django.urls import path, include
urlpatterns = [
path('blog/', include('blog.urls')),
]
앱의 urls.py (예: blog/urls.py):
from django.urls import path
from . import views
urlpatterns = [
path('', views.blog_home, name='blog_home'),
path('<int:post_id>/', views.blog_detail, name='blog_detail'),
]
이렇게 하면 /blog/로 시작하는 요청이 해당 앱의 urls.py로 라우팅됨.
4. reverse()와 URL 템플릿 태그
URL 패턴의 이름을 이용해 동적으로 URL을 생성할 수 있다.
- Python 코드에서:
- from django.urls import reverse reverse('post_detail', kwargs={'id': 10}) # '/post/10/'
- 템플릿에서:
- <a href="{% url 'post_detail' id=10 %}">View Post</a>
이렇게 하면 URL 변경 시 하드코딩을 피하고 유지보수를 쉽게 할 수 있다.
5. 정규 표현식을 사용한 URL (re_path)
Django에서는 re_path()를 사용하여 정규 표현식 기반의 URL 패턴을 만들 수도 있다.
from django.urls import re_path
urlpatterns = [
re_path(r'^article/(?P<slug>[\w-]+)/$', views.article_detail, name='article_detail'),
]
- (?P<slug>[\w-]+) → 알파벳, 숫자, 하이픈(-)이 포함된 문자열을 slug라는 키로 뷰에 전달.
6. URL 네임스페이스 활용
앱이 여러 개일 경우, 네임스페이스를 사용해 구분할 수 있다.
app_name = 'blog'
urlpatterns = [
path('list/', views.post_list, name='post_list'),
]
이후 템플릿에서:
<a href="{% url 'blog:post_list' %}">Blog List</a>
이렇게 하면 네임 충돌을 방지할 수 있다.
오늘의 교훈 및 주의할 점
- URL 패턴 작성 시 끝에 슬래시(/)를 붙이는 습관을 들일 것.
예: path('about/', views.about) (X) → path('about/', views.about, name='about') (O) - URL 이름을 명확하게 지정하여 유지보수를 용이하게 할 것.
- 프로젝트의 규모가 커지면 include()를 적극적으로 활용하여 URL 구조를 모듈화할 것.
- 템플릿에서 URL 태그({% url %})를 사용하면 하드코딩을 피할 수 있어 유지보수가 쉬워진다.
앞으로 Django의 URL 설정을 더 깊이 이해하고, 미들웨어 및 뷰 연동까지 확장해볼 계획이다.
'내일배움캠프 TIL' 카테고리의 다른 글
| 2025.01.23TIL Django: DRF (1) | 2025.01.23 |
|---|---|
| 2025.01.22 TIL - 장고: 데이터베이스 관계 / 날짜 및 시간 Field (0) | 2025.01.22 |
| 2025.01.20 TIL - Django - ORM과 메서드 종류 정리 (0) | 2025.01.20 |
| 2025.01.17TIL - Django / Template (1) | 2025.01.17 |
| 2025.01.16TIL - Django MTV 심화 (0) | 2025.01.16 |