개발로 자기계발
article thumbnail
728x90

앞서 FastAPI의 라우팅과 같은 방식으로 간단히 다뤘다.(타 폴더의 값을 메인 폴더에서 읽음)
다만 하드 코딩된 URL 패턴을 사용했고, 이는 확장성이 좋지 않다.(많은 페이지가 있다면 모든 경로를 추가해야 함)
그래서 하나의 경로 패턴으로 많은 페이지를 처리할 수 있도록 해야 한다.


Django에서 동적 URL 패턴을 위해서 Angle Brackets: '<>'을 사용한다.

 

1) 기존의 코드를 동적 URL 패턴으로 바꿔보자. 우선 views.py을 수정한다.

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseNotFound

# Create your views here.


def monthly_challenge(request, month):
    if month == "january":
        response = "Django is fun!"
    elif month == "february":
        response = "Coding for at least 1 hour every day!"
    elif month == "march":
        response = "Hard Coding is hard"
    else:
        return HttpResponseNotFound("Not month")
    return HttpResponse(response)

기존의 3개 함수들은 삭제되고 하나의 함수에서 매개변수 값으로 호출을 한다.
HttpResponseNotFound는 요청받은 값이 없을 때 지정한 문구를 되돌려준다. 

 

 

2) urls.py 파일에서도 하드코딩된 URL을 삭제하고 하나의 URL만 생성한다.

from django.urls import path

from . import views


urlpatterns = [
    path("<month>", views.monthly_challenge)
]

url에서 Angle Brackets: '<>'가 적용이 된다.

 

 

3) Django를 실행하고 확인했을 때 페이지가 잘 나오는 것을 확인할 수 있다.

http://127.0.0.1:8000/challenges/january

http://127.0.0.1:8000/challenges/february

http://127.0.0.1:8000/challenges/march

 

4) 흐름을 다시 한번 정리를 하자면

폴더: monthly_challenges(프로젝트) url >> challenges(앱) url >> challenges(앱) view (매개변수)

url: http://127.0.0.1:8000/challenges >> <month> >> january or february or march

 

month의 넣는 값에 따라 페이지를 가져올 수 있다.

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)