[Django 11] URL app별로 관리하기

장고 url이 제공하는 include() 함수를 사용하면, 프로젝트의 urls.py를 기능별로(app별로) 편하게 관리할 수 있다.

장고 프로젝트를 처음 생성하면, url은 프로젝트 폴더에서 관리하게 된다.

#project/urls.py

from django.urls import path
import hello.views

urlpatterns = [
    path('admin/', admin.site.urls, name='admin'),
    path('', hello.views.home, name='home'),
    path('new/', hello.views.new, name='new'),
    path('create/', hello.views.create, name='create'),
    path('detail/<int:post_id>', hello.views.detail, name="detail"),
    path('edit/<int:post_id>', hello.views.edit, name="edit"),
    path('update/<int:post_id>', hello.views.update, name="update"),
    path('delete/<int:post_id>',hello.views.delete,name="delete"),
]

CRUD 기능을 가진 app을 만드는데 필요한 url 들이다. 겨우 하나의 app만 가진 장고프로젝트 인데도, 벌써 이렇게 url들이 많아졌다.

만약 여러 기능을 가진 프로젝트를 만든다면 project 폴더의 urls.py가 얼마나 복잡해질지는 안봐도 뻔하다.

그래서, url을 app 별로 관리해주는 것이 필요할 것 같다!

장고 url이 제공하는 include() 함수를 사용하면, 프로젝트의 urls.py를 기능별로(app별로) 편하게 관리할 수 있다.

1. app 폴더 안에 urls.py 파일 생성

#app/urls.py

from django.urls import path
import hello.views

urlpatterns = [
    path('admin/', admin.site.urls, name='admin'),
    path('', hello.views.home, name='home'),
    path('new/', hello.views.new, name='new'),
    path('create/', hello.views.create, name='create'),
    path('detail/<int:post_id>', hello.views.detail, name="detail"),
    path('edit/<int:post_id>', hello.views.edit, name="edit"),
    path('update/<int:post_id>', hello.views.update, name="update"),
    path('delete/<int:post_id>',hello.views.delete,name="delete"),
]
  • 기존에 project 폴더에 있던 urls.py의 내용을 그대로 가져와준다.

    • admin 관련 url은 project 전체에서 관리해야하니 거기에 남겨두자!

2. project 폴더의 url path() 수정

  • include 함수를 import 한 뒤,

  • hello 앱의 url들을 include 한다.

#project/urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('hello.urls'))

이제 프로젝트 내의 urls.py는 요청이 들어온 앱 안에 있는 urls.py로 안내만 해주도록 설정한 것이다. 실질적으로 url을 관리하는건 hello 앱 내에서 이루어지게 된다.

이제 hello 앱의 기능을 수행할 때는 경로가 'blog/' 로 시작하게 된다.

(ex. blog/new , blog/detail/1, ...)

Last updated