Django_3)URLs

지비지비집·2023년 10월 17일
0

Django

목록 보기
3/14
post-thumbnail

이번엔 URLs에 조금 더 집중해보자. 현재 URLs는 어떤 문제점이 있는가? 현재는 큰 문제를 느끼지 못할 수 있다. 그렇다면 urls.py의 위치를 한 번 보자. 우리는 한 프로젝트 안에 여러 기능을 담은 App을 설치할 것인데 urls.py는 프로젝트 폴더에 단 하나로 들어가 있다. 모든 App에서 만든 기능들의 주소를 하나로 관리한다면 유지보수 뿐만 아니라 가독성이 많이 떨어질 것이 분명하다. 그래서 우리는 App에서 url을 관리하고 싶다. 또 다른 문제점으로는 만약 URL의 일부만 변경되는 사항이라면 계속해서 비슷한 URL과 템플릿을 작성해야할까? 아래 그림만 봐도 끔찍하다.

위의 2가지를 해결해보자.

Variable Routing

URL 일부에 변수를 포함시키는 것(변수는 view 함수의 인자로 전달할 수 있음)

path('aricles/<int:num>', views.detail)
path('hello/<str:name>', views.greeting)
# 와 같이 <path_converter : variable_name>의 형태로 작성

URL <-> App

아래 두 그림으로 우리의 목적과 방향성은 설명 가능하다.

그럼 방법에 대해서 알아보자.

include()

프로젝트 내부 앱들의 URL을 참조할 수 있도록 매핑하는 함수

from django.urls impor path, include
# pjt폴더
url patterns = [
	path('articles/', include('articles.urls')),
    path('pages/', include('pages.urls')),
]
# 으로 따로 참조하도록 설정한다. 그러나 include 안의 주소를 보면 현재 App 안에는 urls.py가 존재하지 않기 때문에 우리가 따로 만들어줘야한다.

URL 구조가 변경됨에 따라 미리 만들어둔 모든 html의 주소들을 참조하는 코드들은 변경되어야 한다. 그럼 애초부터 URL에 이름을 지어주면 유지보수에 큰 이점을 가질 수 있을 것이다.
-> path 함수의 세번째 인자로 name속성에 값을 넣어주자!

이제 정말 마지막 문제를 다루어보자. 여러 앱들에서 이름이 같은 url을 사용할 수 있다.
articles 앱 안의 index , pages 앱 안의 index를 사용함에 있어 단순히 이름만으로는 완벽히 분리할 수 없는 상황에 도달한다. 그럼 path안의 이름을 달리하면 되지 않나? 라고 생각할 수 있지만 프로젝트가 커질수록 매번 확인하여 달리하는 일이 더 복잡한 일이 될 것이다. 그래서 app의 url 자체에 이름을 부여하는 방법을 사용한다.
-> app 안의 urls.py 에서 app_name 변수에 이름을 넣어 값을 설정해주자!

profile
"정말 무엇인가를 이해한다면 전문용어를 모르는 사람에게도 설명할 수 있어야 한다." -리처드 파인만-

0개의 댓글