노마드 코더 Airbnb 클론 코딩

노마드 코더 에어비앤비 클론 코딩 #9 Urls and Views

gogi masidda 2022. 10. 26. 21:15

Views

config 폴더의 'urls.py' : 유저가 특정 url로 접근했을 때, 장고가 해야할 행동에 대해 적혀있다.

각 App 폴더마다 있는 'views.py'는 직접 import해야 사용할 수 있다. 그래서 꼭 이름이 views.py일 필요는 없다.

이를 직접 import하는 방법은 두가지다. 

 

①urls.py에 적어주기

views.py에 함수 작성

# views.py

from django.http import HttpResponse

def say_hello(request):
	return HttpResponse('Hello!')

-> urls.py에 path 적어주기

# urls.py

from room.views import say_hello

urlpatterns = [path("rooms",say_hello)] # path("유저가 이동할 url",url로 이동시 실행될 코드나 함수)

②url을 분리된 파일로 옮기기(모든 App 폴더에 개별적인 urls.py를 갖게 됨, config 폴더의 urls.py는 이 모든 파일을 하나로 합치는 역할)

 

config 폴더의 urls.py 파일

config폴더의 urls.py에 ...rooms/1, ...rooms/1/edit 등 rooms/... 으로 가는 모든 경로를 포함하기 위해서 'from django.urls import include'를 해주어야한다. 

그리고 rooms App 폴더 안의 urls.py를 찾아가라고 경로를 설정한다.

rooms 폴더의 urls.py

rooms 폴더의 urls.py에 실행될 함수를 적어준다.

 

제대로 실행된 모습

 

URL에서 변수 받기

path("<받을 변수의 타입: 변수를 부를 이름>", 변수를 받아 실행될 함수)

예)

rooms 폴더의 urls.py

이를 실행하려면, url에 '...rooms/'뒤에 정수가 와야한다.

views.py

'room_id'를 받아 함수를 실행시킨다.

 

Render: 템플릿을 렌더링하는 법

 

views.py의 see_all_rooms 함수

def 함수명(request):
	정보 가져오기
    return render(request,"템플릿 이름", {가져올 데이터})

django는 App 폴더 내에서 템플릿을 찾음. App 폴더 안에 templates폴더를 만들고, '템플릿 이름.html' 생성한다.

 

html 안에서 파이썬을 사용하려면 {% ... %}를 사용한다.

html안에서도 models.py에 접근 가능하다. 'room.amenities.all'처럼 ()가 필요없다.

 

all_rooms 템플릿
잘 적용된 모습

 

see_one_room 함수에서 이용되는 템플릿
try, except문을 이용한 함수

pk가 없을 경우 DoesNotExist 오류가 뜨면 '404 not found'가 뜨게함. not_fount = True를 데이터로 넘겨줌.

pk가 존재하는 경우
pk가 존재하지 않는 경우

 

 

django의 템플릿 시스템으로는 다이나믹한 웹사이트를 만들기 어렵다. 그래서 django는 백엔드에서만, 프론트에서는 React.js를 이용할 것이다.

위의 내용은 알아두기만 하자.

728x90