오늘의 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>

이렇게 하면 네임 충돌을 방지할 수 있다.


오늘의 교훈 및 주의할 점

  1. URL 패턴 작성 시 끝에 슬래시(/)를 붙이는 습관을 들일 것.
    예: path('about/', views.about) (X) → path('about/', views.about, name='about') (O)
  2. URL 이름을 명확하게 지정하여 유지보수를 용이하게 할 것.
  3. 프로젝트의 규모가 커지면 include()를 적극적으로 활용하여 URL 구조를 모듈화할 것.
  4. 템플릿에서 URL 태그({% url %})를 사용하면 하드코딩을 피할 수 있어 유지보수가 쉬워진다.

앞으로 Django의 URL 설정을 더 깊이 이해하고, 미들웨어 및 뷰 연동까지 확장해볼 계획이다.

+ Recent posts