📌 Django URL 구조 정리 - include와 앱 네임스페이스로 FBV/CBV 분리하기
1️⃣ 앱별 URL 파일 분리의 필요성
모든 URL을 config/urls.py에서 관리하면 규모가 커질수록 복잡해지기 때문에,
앱 내부에 URL 파일을 분리하고 include()를 통해 계층적이고 가독성 좋은 구조로 만듭니다.
2️⃣ CBV용 blog/urls.py 생성
# blog/urls.py
from django.urls import path
from blog import cb_views
app_name = 'blog'
urlpatterns = [
path('', cb_views.BlogListView.as_view(), name='list'),
path('<int:blog_pk>/', cb_views.BlogDetailView.as_view(), name='detail'),
path('create/', cb_views.BlogCreateView.as_view(), name='create'),
path('<int:pk>/update/', cb_views.BlogUpdateView.as_view(), name='update'),
path('<int:pk>/delete/', cb_views.BlogDeleteView.as_view(), name='delete'),
]
3️⃣ FBV용 blog/fbv_urls.py 생성
# blog/fbv_urls.py
from django.urls import path
from blog import views
app_name = 'fb'
urlpatterns = [
path('', views.blog_list, name="list"),
path('<int:pk>/', views.blog_detail, name="detail"),
path('create/', views.blog_create, name='create'),
path('<int:pk>/update/', views.blog_update, name='update'),
path('<int:pk>/delete/', views.blog_delete, name='delete'),
]
4️⃣ config/urls.py에서 include() 연결
# config/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
# CBV blog
path('', include('blog.urls')),
# FBV blog
path('fb/', include('blog.fbv_urls')),
# Auth
path('accounts/', include("django.contrib.auth.urls")),
path('signup/', member_views.sign_up, name='signup'),
path('login/', member_views.login, name='login'),
]
5️⃣ 템플릿, 뷰, 모델 내부에서 URL 네임스페이스 적용하기
✅ CBV 내부
# cb_views.py
reverse_lazy('blog:list')
✅ 모델 내부
# blog/models.py
reverse('blog:detail', kwargs={'pk': self.pk})
✅ FBV 내부
# blog/views.py
return redirect(reverse('fb:detail', kwargs={'pk': blog.pk}))
✅ 템플릿 내부
<a href="{% url 'blog:list' %}">홈</a>
<a href="{% url 'blog:create' %}">생성</a>
<a href="{% url 'blog:detail' blog.pk %}">
<a href="{% url 'blog:update' blog.pk %}">
<form action="{% url 'blog:delete' blog.pk %}" method="POST">
✅ 정리
- include()를 사용하면 앱 별 URL 관리를 체계적으로 할 수 있음
- app_name을 통해 템플릿이나 redirect에서 네임스페이스를 명확히 구분 가능
- 템플릿, 모델, 뷰에서 url 'app_namespace:name' 구조로 URL 호출
💡 실무에선 프로젝트 구조가 커질수록 이 방식이 유지보수에 필수입니다!
'Django' 카테고리의 다른 글
Chapter 6-1 [블로그] 댓글 기능 만들기 - Static Files 설정과 Bootstrap 적용 (0) | 2025.05.09 |
---|---|
Chapter 5-8 📌 Mini Project - Admin 권한으로 모든 게시글 수정/삭제 가능하게 만들기 (0) | 2025.05.08 |
Chapter 5-6 📌 Django CBV로 블로그 글 삭제 기능 구현하기 (0) | 2025.05.08 |
Chapter 5-5 📌 Django CBV로 블로그 글 수정 기능 구현하기 (0) | 2025.05.08 |
Chapter 5-4 📌 Django CBV - LoginRequiredMixin과 CreateView로 블로그 글 작성 기능 구현하기 (0) | 2025.05.08 |