Django

Django 우아한 URL

체리1001 2021. 8. 18.

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

댓글