[장고]

[Django] URL 매핑 - include를 이용한 url 계층 관리

danhan 2022. 6. 30. 11:07

url을 연결할 때 urlpatterns에 path들을 단순 나열해두면 path가 많아졌을 때 관리가 어렵다.

# myproject/urls.py
from django.contrib import admin
from django.urls import path
# import 해주기
import myapp.views

urlpatterns = [
    # <http://127.0.0.1:8000/admin/> 일 때
    path('admin/', admin.site.urls),
    # <http://127.0.0.1:8000/> 일 때 myapp.views.home함수를 실행해라
    path('', myapp.views.home, name='hello_world'),
]

그래서 django.urls의 include를 사용해 url들을 계층적으로 관리한다.

먼저 url을 관리할 앱을 myproject/setting.py의 INSTALLED_APPS에 등록한다.

# myproject/setting.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp.apps.MyappConfig',
    'appone',
    'apptwo',
]

각 앱에 추가로 urls.py 생성한다. ( appone/urls.py, apptwo/urls.py )

원래의 myproject/urls.py에 와서 외부 url을 등록한다.

# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
import myapp.views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', myapp.views.first, name='first'),
    path('second/', myapp.views.second, name='second'),

		# appones/어쩌구저쩌구 모든 url들은 appone 폴더의 urls.py 파일에서 담당
    path('appones/', include('appone.urls')),
]

path('appones/', include('appone.urls')),코드를 통해

http://127.0.0.1:8000/appones/1

http://127.0.0.1:8000/appones/2

http://127.0.0.1:8000/appones/ab

등등 appones/로 시작하는 모든 url을 appone.urls에서 관리하게 된다.

다음으로 appone/urls.py에 url을 동록한다.

from django.urls import path, include
from appone import views

urlpatterns = [
    # 아무것도 입력되지 않았을 때 실행될 함수니까
    # 현재 url은 <http://127.0.0.1:8000/appones/> 이다.
    path('', views.appone),
    #  <http://127.0.0.1:8000/appones/first/>
    path('first/', views.apponefirst),
]

정리

하나의 프로젝트에 app이 여러 개 존재한다면, 각각의 앱 안에 urls.py 파일을 만들고 프로젝트의 urls.py에서 app의 urls.py를 연결해 URL관리를 위탁할 수 있다.

'[장고]' 카테고리의 다른 글

[Django] Template 상속  (0) 2022.06.30
[Django] Static 파일 관리하기  (0) 2022.06.30
[Django] 장고 처음 시작하기  (0) 2022.06.30