초보 개발자

url 'namespace : name', reverse, get_absolute_url 본문

Python/airbnb 클론

url 'namespace : name', reverse, get_absolute_url

taehyeki 2022. 2. 7. 20:02

전에도 한번 말했다싶이 html에 href = "/room/1/edit-room" 이런식으로 적어놓았다고 했을 때

실행은 잘 되지만 만약 저 href를 바꿔야 할 때는 일일이 다 찾아서 바꿔야 할 것이다. 이를 위해 저번에 name과 namespace(app_name)을 설정해둔 적이 있다. 이를 사용하는 방법은 아래와 같다.

url template tag라고 한다.

href = "{% url "app_name:name" 매개변수 %}"

app_name이 먼저 오고 그 뒤에 name이 오는 형식이다.

근데 뒤에 매개변수라고 적어놓은 것은 무엇일까??? 사실 적당한 이름이 생각이 안나서 대충 적어 두었다...

저기에는 room/1 이런식으로 1이 들어가는 자리이다. 

사용하기 위해서는 path에서 <>로 감싼뒤 그 안에 타입과 변수명을 지정해준다.  room/1 이 경우에 pk에는 1이라는 값이 들어온다. 이를 view에서 사용하는 것이다.  url template tag로 사용하기 위해선 아래와 같이 매개변수도 하나 넣어주어야 한다. room.id

 

 

그리고 reverse라는 걸 사용해 볼 것인데 이건 url name 받아서 그 url을 리턴해준다.

만약 argument가 필요하다면 ( <int:pk>와 같이 작성된 경우 ) 그 뒤에 적어주면 된다.

 

우리는 Room model에서 get_absolute_url이라는 것을 만들어 주려고 한다. 이건 디테일뷰를 만들때 많이 사용된다고 한다. 아래와 같이 만든다. 

이건, 모델의 url을 만들어주는 것 같다. 즉 이 경우에는 room/id 이런식인 url이 만들어 지는 것이다. 이렇게 만들고 나면 url template tag대신에 사용할 수도 있다. 왜냐면 room은 get_absolute_url을 가지고 있고 이건 detail url로 이동시켜주기 때문이다!!

 

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

django Filtering  (0) 2022.02.08
Http404, FBV detail -> CBV detail  (0) 2022.02.07
listview  (0) 2022.02.06
pagenation 2  (0) 2022.02.06
pagenation 1  (0) 2022.02.05