Django

다이나믹 라우팅

Strickland 2024. 5. 10. 18:48

현재 폴더 구조

 

이전 게시글에서 특정 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