django에서는 일정한 패턴을 가지고 입력하게 되는 URL에 대해서 다이나믹 URL을 지원하는데
이러한 URL을 처리하는 방식을
우아한 URL
이라고 표현 합니다.
<장점>
URL의 형태를 우리가 원하는대로 쉽게 설계할 수 있다.
직관적으로 이해할 수 있다.
url마다 모두 구분을 해서 urls.py의 urlpatterns에 모든 경우의 수에 따른 경로를 적어줘도 괜찮지만 그건 너무 복잡합니다..!
#foods/urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index),
path('menu/<str:food>/', views.food_detail),
]
<str:food> 부분이 바로
경로 변수(Path Variable)를 이용한 동적 URL !!
menu 뒤에 오는 (/ 제외) 모든 url을 문자열로 보고 food에 담아서 food_detail 함수에 넣어주는 것입니다.
str 이외에도
int (0또는 양의 정수와 일치하는지 확인),
slug (문자, 숫자, 언더바, 하이픈으로 구성된 문자열인지 확인)
등이 있습니다.
<path 함수>
django.urls.path
path(route, view, kwargs=None, name=None)
(1) route
URL 문자열을 인수로 받으며 경로 변수(Path Converter)를 사용하여 URL의 일부를 view의 인수로 보낼 수 있어요.
-> Path Converter
<1> str: 경로 구분 기호(/)를 제외한 모든 문자열과 매칭됩니다.
<2> int: 0 또는 양의 정수와 매칭됩니다.
<3> slug: 문자, 숫자, 하이픈(-), 밑줄(_)로 구성된 문자열과 매칭됩니다.
<4> uuid: 범용 고유 식별자(UUID)와 매칭됩니다.
<5> path: 경로 구분 기호(/)를 포함한 모든 문자열과 매칭됩니다.
(2) view
함수형 view 또는 클래스 기반 view가 들어갈 수 있고
include를 사용해서 다른 URLconf 모듈로 연결할 수도 있습니다.
(3) kwargs
view에 추가 인자를 전달할 때 사용해요.
(4) name
path 함수가 가지는 URL 패턴에 이름을 붙여 주기 위해 사용하는데 URL을 직접 템플릿에 적지 않게 해주고 URl을 직관적으로 참조할 수 있게 해줍니다.
이렇게 food를 food_detail로 보내줬으니 food_detail 함수에서는 아래와 같이 이것을 인자로 받아줘야 합니다.
def food_detail(request, food):
context = { "name": food }
return render(request, 'foods/detail.html', context=context)
이렇게 해서 detail 템플릿에서 받은 정보를 통해 화면을 구성할 수 있습니다.
'Django' 카테고리의 다른 글
Django의 Model과 ORM (0) | 2021.08.23 |
---|---|
상태 코드 (0) | 2021.08.19 |
Django Template Language (0) | 2021.08.15 |
Django MVT 구조 (0) | 2021.08.13 |
Django 템플릿과 렌더링 (0) | 2021.08.12 |
댓글