이전 게시글에서 특정 GET 요청에 대한 라우터를 만들어 봤다 .
하지만 모든 라우터를 하나하나 만들기엔 내 시간이 부족하다
이번에는 다이나믹 라우팅을 써보자!
challenges/urls.py 를 다음과 같이 수정하자
from django.urls import path
from . import views
urlpatterns = [
path("<month>", views.monthly_challenge)
]
<month> 는 pathVariable 이라고 생각하면 된다.
challenges/views.py 를 다음과 같이 수정하자
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseNotFound
# Create your views here.
def monthly_challenge(request, month):
challenge_text = None
if month == "january":
challenge_text = "Eat no meat for the entire month"
elif month == "february":
challenge_text = "Walk for at least 20 minutes every day!"
elif month == "march":
challenge_text = "Learn Django for at least 20 minutes ebery day"
else:
return HttpResponseNotFound("This month is not supported")
return HttpResponse(challenge_text)
challenges/urls.py 에서 설정한 month 가 파라미터로 입력이된다 .
입력된 month 에 따라서 동적 라우팅을 해준다.
해당되는 라우터가 없을땐 404 NOT FOUND 를 return 해준다.
아래와 같이 동적 라우팅을 확장 할 수도 있다.
challenges/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('<int:month>', views.monthly_challenge_by_number),
path("<str:month>", views.monthly_challenge)
]
pathVariable 의 타입에 따라서 라우팅이 가능하다 . challenges/views.py 는 다음과 같이 refactor 하자
def monthly_challenge_by_number(request, month):
return HttpResponse(month)
def monthly_challenge(request, month):
try:
challenge_text = monthly_challenges[month]
return HttpResponse(challenge_text)
except:
return HttpResponseNotFound("This month is not supported")
'Django' 카테고리의 다른 글
dot notation (0) | 2024.05.15 |
---|---|
CSS 파일 가져오기 (0) | 2024.05.09 |
커스텀 404 페이지 (0) | 2024.05.06 |
파이참 장고 HTML 자동 완성 설정하기 (0) | 2024.05.05 |
템플릿 서빙 방법 및 문법 (0) | 2024.05.05 |