URL 작성
우리는 앞으로 많은 URL을 작성하게 될 겁니다. Django가 가지고 있는 철학 중 하나가 바로 'URL은 반드시 아름답게 작성되어야 한다'는 것인데요, 막상 작성하다보면 헷갈릴 수 있는 부분들이 있습니다. 이번 노트에서는 앞으로 여러분이 URL을 작성할 때 알아두면 좋을 내용들을 간단하게 살펴보겠습니다.
첫째. urls.py에 적는 URL 패턴은 슬래시( / )를 붙여서 작성합니다.
urlpatterns=[
path('foods/', views.index),
path('foods/banana/', views.fruit),
]
URL 끝에 있는 슬래시를 트레일링 슬래시(traling slash)라고 하는데요, 우리가 평소에 구글에 접속하고자 할 때를 생각해보면 www.google.com 이라고 적죠? 그런데 www.google.com/ 이라고 적어도 같은 페이지로 이동하기 때문에 별다른 생각없이 사용해 왔을겁니다.
결론부터 말하면 codeit.kr 이나 google.com 같이 도메인 끝에 나오는 슬래시는 그 유무에 따른 차이가 없습니다. 하지만 도메인이 아닌 다른 url, 그러니까 codeit.kr/learn/courses/django-web-development과 같은 url에 대해서는 슬래시가 붙은 주소와 아닌 주소가 서로 다른 곳을 가리키는 주소가 됩니다. 위에 예시로 적은 코드로 말하면 'foods/' 와 'foods'가 서로 다르다는 거죠.
이와 같은 형태가 남아있는 이유는 과거에는 '파일'과 '디렉토리'를 구분하는 것이 중요했기 때문인데요. 슬래시가 붙은 주소는 '디렉토리'를 가리키고 슬래시가 없는 주소는 '파일'을 가리키도록 만들어 졌습니다. 그런데 오늘날에는 URL이 직접적으로 파일이나 디렉토리를 가리키지 않죠. URL로 직접 데이터에 접근하기 보다 대부분의 데이터는 데이터베이스에 저장해서 사용합니다.
자, 그러면 웹 사이트를 개발하는 입장에서는 슬래시 유무를 하나의 일정한 형식으로 맞춰줄 필요가 있겠죠? 그래서 Django는 기본적으로 트레일링 슬래시가 붙어 있지 않은 URL로 요청이 들어오면 먼저 해당 URL와 딱 맞는 URL 패턴이 있는지를 보고, 만약 없다면 슬래시를 붙인 URL로 다시 리디렉션 하는 설정이 기본적으로 되어있습니다. 그래서 우리가 URL 패턴을 작성할 때 트레일링 슬래시가 붙어있는 형태로 작성하는 것이 일정한 형식을 유지하는 측면에서 좋습니다. 그러면 슬래시가 안붙은 URL로 요청이 들어오더라도 자동으로 슬래시가 붙은 URL로 연결되기 때문입니다.
둘째. 다른 URL로 이동하기 위한 URL을 적을 때 앞에 슬래시(/)가 있으면 도메인으로 부터의 경로를 의미합니다. 예를 들어, 현재 codeit.kr/food/ 에 있다고 하고 아래의 이동하기 링크를 누르면
<a href="/banana/">이동하기</a>
codeit.kr/food/banana/가 아닌codeit.kr/banana/로 이동하게 됩니다.
셋째. 다른 URL로 이동하기 위한 URL을 적을 때 앞에 슬래시(/)가 없으면 현재 URL 뒤에 이동하는 URL이 연결된 경로가 됩니다.
예를 들어, 현재 codeit.kr/food/ 에 있다고 하고 아래의 이동하기 링크를 누르면
<a href="banana/">이동하기</a>
codeit.kr/food/banana/ 로 이동하게 되는거죠.
자, 앞으로 우리는 점점 더 많은 페이지들을 연결하는 작업을 하게 될 텐데요, 이번 노트에서 설명한 내용들을 참고해서 작성하면 조금 더 명확하게 여러분이 원하는 URL 구조를 작성할 수 있겠죠?
출처 코드잇
'BackEnd > Django로 웹 개발 시작하기' 카테고리의 다른 글
[Django 웹 개발 시작] MVC와 MVT (0) | 2023.03.14 |
---|---|
[Django 웹 개발 시작] 메인페이지가 에러페이지? (0) | 2023.03.14 |
[Django 웹 개발 시작] URL 연결하기 (0) | 2023.03.14 |
[Django 웹 개발 시작] 레스토랑 프로젝트 #01 프로젝트 생성 (0) | 2023.03.13 |
[Django 웹 개발 시작] Django 앱(App) 구조 (0) | 2023.03.13 |