장고 프로젝트를 처음 생성하면, 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별로) 편하게 관리할 수 있다.
#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"),
]
include
함수를 import 한 뒤,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, ...)