반응형
장고의 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 어디에서나 명확하게 참조가 가능하다
반응형