초보 개발자

url, views 본문

Python/airbnb 클론

url, views

taehyeki 2022. 2. 5. 17:05

이제 첫 페이지를 만들어보려고한다. 지금은 아무 설정도 되어있지 않기에 localhost:8000으로 들어가면 오류가난다.

이를 설정해주려고한다. 먼저 url을 설정해주어야하는데, 우린 앞으로 수많은 url을 만들어야하기 때문에 교통정리를 해줄 필요가 있다.

 

/login /user/1/edit /room /room/1/edit ... 과 같이 수많은 url이 생기는데 하나에 다 정리하면 얼마나 복잡하겠는가?

따라서 각 app안의 urls.py에 관련된 url만 받아와서 view를 실행시켜준다.

 

먼저 /, /login, 과 같은 기본적인 url은 core app에서 다뤄주려고한다.

core.urls.py

urlpatterns라는 배열을 만들고 거기에 path를 하나씩 만들어주어야 한다.

여기서 ''라는 것은 아무것도 적히지 않았을 때를 의미한다. 그리고 room_views 즉 rooms 앱안에 있는 views중 all_rooms라는 views를 출력하라는 의미이고 이 url path의 이름은 home이라고 적어준 것이다.

 

위에 app_name을 따로 명시해주었는데 이는 나중에 우리가 방금 지정해준 home을 사용하기 위해서 이다

core:home 이런식으로 사용하여 나중에 ''가 'core'로 바뀌어도 문제가 되게 하지 않는다. 만약 name을 안적어준다면

우리가 일일이 ''로 적은 부분을 'core'로 변경시켜줘야하는 불편함이 생겨버린다.

 

이건 core에서 정의해준 것이고 이제 이걸 config.urls.py에서 읽을 수 있도록 해주어야 한다.

 

config.urls.py

 

여기서 다른 app의 urls를 읽어오기 위해서는 include라는 걸 사용해야한다.

여기서도 path의 첫 번째 인자에는 url을 적어주야한다. 여기서 만약 /user라고 적으면

/user로 시작하는 url은 다 저기로 들어간다. ' '처럼 아무것도 적어주지 않는다면 /login, /logout과 같이 /로 시작하는 url이 다 이리로 간다.

 

namespace는 무슨 역할을 하는지 아직까지는 잘 모르겠다. 이건 app_name과 동일하게 적어주어야 한다고 한다 따라서 core라고 적었다.

 

마지막으로 room 앱의 view를 만들어주어야한다.

rooms.views.py

all_rooms라는 함수를 만들어준다. 여기서 첫번째 매개변수로 request를 받아온다.

장고가 request를 받으면 그걸 python object로 변환시켜준다. 그리고 모든뷰에 첫번째 인자로 준다.

우리는 이걸 받으면 response를 반환해주어야 한다. 위와 같이 적어주면 이제 localhost:8000/으로 접속했을 때

오류가 나지않는 것을 확인할 수가 있다.

 

우리는 httpresponse보다는 render를 사용할 것이다. render는 httpresponse안에 html을 넣어서 보내줄 수가 있다.
render 안에 request를 적어주어야한다. request없이는 response가 있을 수 없다.

 

이렇게 작성해주면 templates라는 폴더안에서 all_rooms.html을 찾아 출력해준다.

 

 

templates.all_rooms.html

하지만 이렇게만 하면 아래와 같이 오류가 발생한다.

tempates라는 폴더에 all_rooms.html이 존재하지 않는다고 한다.

조금 더 내려가면 아래와 같은 글이 출력이 된다.

근데 여기보면 이상한 곳에서 templates를 찾고 있는 것을 확인할 수 있다. 저런 경로는 본 적도 없다.

config.settings.py

우리는 장고에게 우리의 templates가 어디에있는지 알려주어야 한다.

 

config에 TEMPLATES라는 것이 있는데 여기 기본 DIRS가 빈 배열로 되어있다. 여기에 'HI'라고 적어주면 아래와 같이 새로 뭔가 생기는데 이 HI를 우리가 만든 templates로 바꿔주면 될 것 같다.

 

render를 사용하면 context도 보내줄 수 있다. 그리고 그걸 html에서 사용할 수 있다.

{{}}를 사용하여 쓸 수 있고, 또 {%if%}{%endif%}와 같은 문법을 이용하여 사용할 수도 있다.

이를활용하여 좀 더 응용할 수도 있겠다.

'Python > airbnb 클론' 카테고리의 다른 글

pagenation 1  (0) 2022.02.05
extend base.html, include  (0) 2022.02.05
django-seed  (0) 2022.02.04
raw_ids ,inline Admin, save()  (0) 2022.01.26
photo model  (0) 2022.01.26