Chapter 5-7 📌 Django URL 구조 정리 - include와 앱 네임스페이스로 FBV/CBV 분리하기

2025. 5. 8. 10:07·Django

📌 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
'Django' 카테고리의 다른 글
  • Chapter 6-1 [블로그] 댓글 기능 만들기 - Static Files 설정과 Bootstrap 적용
  • Chapter 5-8 📌 Mini Project - Admin 권한으로 모든 게시글 수정/삭제 가능하게 만들기
  • Chapter 5-6 📌 Django CBV로 블로그 글 삭제 기능 구현하기
  • Chapter 5-5 📌 Django CBV로 블로그 글 수정 기능 구현하기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Python (32)
      • 프로젝트 (110)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    trumpmuskclash
    classaction
    youngprofessionals
    bts
    btsreunion
    titaniumcase
    urbantrends
    homebartrend
    americanlaw
    뷔
    btscomeback
    RM
    global politics
    chinanightlife
    life reflection
    newpoliticalparty
    lawsuitculture
    gpterror
    btsjungkook
    americaparty
    travel ban
    btsdischarge
    remittance
    smartphonedurability
    college reunions
    basalcellcarcinoma
    chatgpterror
    hotcoffeecase
    self-growth
    livebroadcast
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 5-7 📌 Django URL 구조 정리 - include와 앱 네임스페이스로 FBV/CBV 분리하기
상단으로

티스토리툴바