본문 바로가기

카테고리 없음

[Django] path의 인자값

반응형

 

 

장고의 urls.py를 보면 이런 형식으로 되어있다

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index),
]

보통은 이런 식으로 작성을 할 것이다.

 

그렇다면 첫 번째 인자값과 두 번째 인자값으로는 어떤 것들이 들어가는 걸까? 

 

파라미터를 명시해 주면 더욱 명확하게 알 수 있을 것이다.

from django.urls import path

from . import views

urlpatterns = [
    path(route = '',view = views.index, name='index'),
]

이제 더 명확하게 알 수 있을 것이다. 

 

 

그럼 더 확실하게 무엇이 들어가는지 봐 보자

def _path(route, view, kwargs=None, name=None, Pattern=None):
    if isinstance(view, (list, tuple)): ##base urls.py에서 일어나는 로직
        # For include(...) processing.
        pattern = Pattern(route, is_endpoint=False)
        urlconf_module, app_name, namespace = view
        return URLResolver(
            pattern,
            urlconf_module,
            kwargs,
            app_name=app_name,
            namespace=namespace,
        )
    elif callable(view): ##앱의 urls.py에서 일어나는 로직
        pattern = Pattern(route, name=name, is_endpoint=True)
        return URLPattern(pattern, view, kwargs, name)
    else:
        raise TypeError('view must be a callable or a list/tuple in the case of include().')


path = partial(_path, Pattern=RoutePattern)
re_path = partial(_path, Pattern=RegexPattern)

django의 소스코드에서 path를 나타내는 부분이다.

 

if 부분은 설명과 같이 base urls.py에서 include를 하였을 때 일어나는 로직이고

elif 쪽이 앱 urls.py 안에서 일어나는 로직이다.

 

route

URL 패턴을 가진 문자열이다.

 

view

Django 에서 일치하는 패턴을 찾으면, HttpRequest 객체를 첫번째 인수로 하고, 경로로 부터 '캡처된' 값을 키워드 인수로하여 특정한 view 함수를 호출.

 

kwargs

임의의 키워드 인수들은 목표한 view 에 사전형으로 전달

 

name

URL 에 이름을 지으면, 템플릿을 포함한 Django 어디에서나 명확하게 참조가 가능하다

 

 

 

반응형