영벨롭 개발 일지

[Django] 장고 URL 등록하기: path(), include() 본문

Back-end/Django

[Django] 장고 URL 등록하기: path(), include()

영벨롭 2022. 5. 12. 18:46

[ 장고 URL 등록하기 ]

 

 우리는 가상환경안에서 우리의 django 프로젝트내의 urls.py 파일을 통해 URL을 등록할 수 있습니다. 

 

 URL을 등록할 때 사용되는 함수는 path() include()가 있는데 결론부터 말씀드리자면 path() 대신 include()를 사용하는 이유는 우리의 프로젝트를 좀 더 효율적으로 구현하기 위해서 인데요!

 

 이제 path()와 include()를 차례대로 살펴보겠습니다. 

 

 (저는 우선 practice_url 이라는 장고 프로젝트를 생성하여 myapp, board, product 어플리케이션을 생성하였습니다.)

# practice_url/practice_url/urls.py

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

# url 등록
urlpatterns = [
    path('admin/', admin.site.urls),
]

 

 

 

 

[ path() ]

 

 우리의 웹 사이트 url이 http://127.0.0.1:8000 이라고 가정했을 때,

 

 path('path/', app.views.funct) 는 http://127.0.0.1:8000/path/로 접속했을 때 app.views.funct 로부터 반환받은 페이지를 url에 등록해주는 함수입니다. 

 

 저는 프로젝트 내부에 myapp, board, product 어플리케이션 폴더 내부에 templates으로 각각 2개의 html 파일을 만들었고, 이제 urls.py에 각 페이지를 표시할 URL을 등록해보겠습니다. 

 

 product와 board의 페이지들은 각각 products/, boards/ 경로로 묶어두겠습니다. 

 

# practice_url/myapp/views.py 
# 다른 어플리케이션도 마찬가지로 views.py 작성하기!

from django.shortcuts import render

# Create your views here.
def first(request):
  return render(request, 'first.html')

def second(request):
  return render(request, 'second.html')

 

from django.contrib import admin
from django.urls import path, include
import myapp.views
import board.views
import product.views

# url 등록
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', myapp.views.first),
    path('second/', myapp.views.second),
    path('boards/', board.views.board),
    path('boards/first/', board.views.boardfirst),
    path('products/', product.views.productfirst),
    path('products/list/', product.views.productlist)
]

 

 추가할 페이지가 총 6개이므로 path() 함수를 6개 추가해주어야겠죠?

 

 현재 제 프로젝트에는 등록해야할 URL이 6개이므로 비교적 간단하게 보일 수 있지만, 실제 프로젝트는 수많은 URL을 등록해야하므로 path()만을 이용한 URL 등록은 굉장히 비효율적일 수 있습니다. 

 

 때문에 우리는 include()를 사용하는 것입니다. 

 

 

 

 

[ include() ]

 

 우리는 include() 를 이용함으로써 우리의 프로젝트에 URL을 등록할 때, 훨씬 더 효율적으로 URL을 등록하고 관리할 수 있게 됩니다. 

 

 include() 함수를 사용하기 위해선 urls.py 에 import 해주어야 합니다. 

 

# practice_url/practice_url/urls.py

from django.urls import include

 

product와 board의 페이지들은 각각 products/, boards/ 경로로 묶어두었죠?

 

우선, product와 board 폴더에 각각 인위적으로 urls.py 폴더를 생성하고 코드를 작성해줍니다. 

 

# practice_url/board/urls.py

from django.urls import path
from board import views

urlpatterns = [
  path('', views.board),
  path('first/', views.boardfirst),
]
# practice_url/product/urls.py

from django.urls import path
from product import views

urlpatterns = [
  path('', views.productlist),
  path('first/', views.productfirst),
]

 

 

 

 이제 우리의 프로젝트의 urls.py 폴더는 다음과 같이 작성해줍니다. 

 

# practice_url/practice_url/urls.py

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

# url 등록
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.first),
    path('second/', views.second),
    path('products/', include('product.urls')),
    path('boards/', include('board.urls'))
]

 

 path('products/', include('product.urls')) 는 http://127.0.0.1:8000/products/ 로 시작하는 모든 URL 들은 product 폴더안의 urls.py 파일 안에서 관리할 것이다~ 라는 것인데요.

 

 products/로 시작하는 모든 URL은 product/urls.py 파일 안에서 관리할 것이라고 Django에게 알려주는 것입니다. 

 

반응형