본문 바로가기
App Programming/Django

[Django] URL

by goatlab 2023. 6. 20.
728x90
반응형
SMALL

URL

 

URL은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다. 쉽게 말해서, 웹 페이지를 찾기위한 주소를 말한다.

 

URLconf

 

URLconf 용어는 URL과 뷰를 매핑해주는 urls.py 파일을 말한다. URLconf를 정의할 때 하나의 파일 또는 2개의 파일에 정의할 수도 있다. 보통 프로젝트는 전체 URL을 정의하는 프로젝트 URL과 앱마다 정의하는 앱 URL 2계층으로 나눠서 코딩하는 방향이 좋다. 이 방식은 URLconf 모듈을 계층적으로 구성하므로 변경도 쉽고 확장도 용이해진다.

 

URL 패턴별로 이름을 지정할 수 있고 패턴 그룹에 대해 이름 공간을 지정할 수 있따. 이는 reverse() 함수나 {% url %} 템플릿 태그를 사용하여 소스에 URL을 하드 코딩하지 않아도 필요한 URL을 추출할 수 있는 기능이 있다.

 

장고에 요청 (URL)이 들어왔을 때 다음과 같이 수행한다.

 

  • urls.py 파일에 정의된 URL 패턴과 매칭되는지 분석
  • settings.py 파일의 ROOT_URLCONF 항목을 읽어 최상위 URLconf (urls.py)의 위치를 알아냄
  • URLconf를 로딩하여 urlpatterns 변수에 지정되어 있는 URL 리스트를 검사
  • 위에서부터 순서대로 URL 리스트의 내용을 검사하다가 URL 패턴이 매치되면 검사 종료
  • 매치된 URL 뷰를 호출

 

urlpatterns

 

경로를 추가하는 방법에는 직접 path를 부여하는 것과 include를 사용하는 것이 있다. 직접 추가는 방법은 myproject/urls.py을 다음과 같이 프로그래밍한다.

 

from polls import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path("polls/", views.index, name="index"),
    path("polls/<int:question_id>/", views.detail, name='detail'),
    path("polls/<int:question_id>/vote/", views.vote, name='vote'),
    path("polls/<int:question_id>/result/", views.results, name='results')
]

 

include를 사용하는 경우 myproject/urls.py와 polls/urls.py를 다음과 같이 프로그래밍한다.

 

# myproject/urls.py
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/', include('polls.urls'))
]
# polls/urls.py
from django.urls import path
from . import views

app_name = 'polls'
urlpatterns = [
    path("", views.index, name="index"),
    path("<int:question_id>/", views.detail, name='detail'),
    path("<int:question_id>/vote/", views.vote, name='vote'),
    path("<int:question_id>/result/", views.results, name='results')
]

728x90
반응형
LIST

'App Programming > Django' 카테고리의 다른 글

[Django] 템플릿 (Template)  (0) 2023.06.22
[Django] 뷰 (View)  (0) 2023.06.22
[Django] 모델 (Model)  (0) 2023.06.20
[Django] MVT 패턴  (0) 2023.06.20
[Django] 서버 배포  (0) 2023.04.10