일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 컴퓨터공학 #c #c언어 #문자열입력
- HTML #CSS
- 컴퓨터공학 #자료구조 #스택 #c++ #알고리즘 #백준문제풀이
- 잔
- BOJ #컴퓨터공학 #C++ #알고리즘 #자료구조
- 컴퓨터공학 #Java #자바 #클래스 #객체 #인스턴스
- Today
- Total
영벨롭 개발 일지
[Django] 장고 URL 등록하기: path(), include() 본문
[ 장고 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에게 알려주는 것입니다.
'Back-end > Django' 카테고리의 다른 글
[Django]장고 Model 만들기 - ORM & Migration (0) | 2022.05.17 |
---|---|
[Django]장고를 위한 최소한의 데이터베이스 DB (0) | 2022.05.17 |
[Django]장고 static 파일 다루기 (0) | 2022.05.12 |
[Django] 장고 개발 환경 세팅하기 - 가상 환경, 설치, Django 내부 구조 (0) | 2022.05.11 |
[Django]장고 Django 시작하기 - Django와 WEB (0) | 2022.05.11 |