티스토리 뷰

Backend-dev/python

djanog urls파일 만들기

RunningWater 2018. 10. 19. 16:00

이제 무슨 작업을 해야할까요?

모델 부분, 어드민 부분도 완료했으니 이제는 뷰와 템플릿을 부분을 완성해야합니다. 뷰는 views.py에 정의합니다. 하지만 그 전에 urls.py를 살펴봐야 합니다. 장고는 url에 맞는 뷰를 보여주기 때문입니다. 이 부분에 대해서는 코드를 보면서 좀 더 설명하도록 하겠습니다.

프로젝트의 urls.py 설정하기

기본적으로는 우리가 만든앱에서는 urls.py가 없고, 프로젝트를 나타내는 mysite에는 urls.py가 있습니다. 보통은 앱 폴더에도 urls.py 폴더를 만들어서 앱의 url들을 정의하고, 그 앱을 프로젝트 url에 연결시킵니다.



mysite에 urls.py를 보시면 기본적으로 admin 사이트가 들어가 있습니다. 그 밑에 include를 통해서 reading 앱의 urls.py를 연결시키면 됩니다. include를 이용하면 urls.py에 있는 모든 url을 다 연결시킵니다.


path의 첫 번째 인수는 어디에 연결시킬 지를 나타냅니다. 우리는 localhost:8000/reading/에 연결시키게 됩니다.


기본적으로 앱에는 urls.py가 생성되지 않습니다. 만들어주셔야 합니다.

reading앱의 urls.py 설정하기

우선은 코드를 봐주세요.



같은 디렉토리에 있는 views를 갖고와 주시고, app_name을 지정했습니다. 이렇게 앱의 이름을 적는 것은 네임 스페이스를 생성하는 것입니다. url패턴이 똑같을 수 있지만 "이 url은 reading앱의 것이다"라고 명시해 주는 것입니다.


장고의 경우 대부분(파일, 속성, 변수)의 "이름"들이 정해져 있습니다. 꼭 명심해주세요.


url 패턴을 보시면 path의 첫 번째 인수는 어디에 연결시키는 지를 나타낸다고 했습니다. 첫 번째 url은 빈 문자로 되어있습니다. 이럴 경우 "localhost:8000/reading"에 연결됩니다. 우리가 프로젝트의 urls에서 기본적으로 reading앱의 url들을 localhost:8000/reading에 연결시켰고, 앱의 url 부분은 비어있기 때문입니다.

장고가 뷰를 매칭 해주는 방식

url 패턴을 보시면 장고는 어떻게 url과 view를 매칭하는 지 알 수 있습니다. path의 첫 번째 인수에 해당되는 url 요청에 대해서 두번째 인수에 해당되는 뷰를 보여주는 것입니다. 


as_view는 클래스 뷰를 보여줄 때 사용합니다. as_view가 붙지 않으면 함수형 뷰를 나타냅니다.


두 번째 url은 path('books/', views.ListsView.as_view(), name="list")라고 되어 있습니다. 이 부분을 풀어서 설명하면 "localhost:8000/reading/book에 접속하면 ListsView라는 이름의 클래스형 뷰를 보여주고 이 url의 (간편하게 접근하기 위한) 이름을 list라고 한다." 라고 정의할 수 있습니다.

장고의 path converter

세 번째 url에 보이는 <int:pk>는 장고의 path converter입니다. 변수라고 생각하시면 쉽습니다. int는 숫자를 나타내고, pk는 이름입니다. "wisesaying/1/" 이나 "wisesaying/2/" 와 같은 형태의 url을 받는 다고 생각하시면 됩니다.


<type:name>의 형태로 기본적으로 str, int, uuid, slug와 같은 type은 기본적으로 정의되어 있습니다.


장고의 문서에서 좀 더 많은 예시를 볼 수 있습니다.



우리는 각 url에 대해서 다른 view를 보여주도록 코드를 작성했습니다. 하지만 여러 url에 대해서 하나의 뷰를 보여줄 수도 있습니다. 2번째 인수로 같은 뷰를 전달하기만 하면 되니까요. 여러 url에 하나의 뷰가 가능하는 점을 잊지마세요.



다음 포스팅에서는 각 url에 정의한 뷰 들을 만들어보겠습니다. 


댓글