무효 클릭 IP 추적 중...
파이썬/django(장고)

[장고 기초] 기본 html을 이용하여 detail view 구현 해보기

꼬예 2021. 11. 17.

여러 페이지중에서 특정 페이지를 접속할때 사용하는 view를  일반적으로 detail view 라고 부릅니다.

 

우리가 흔히 아는 형태는 아래와 같이  <int:id>를 url에 넣어주고 , 

url에서 전달받은 id값은 view함수의 두번째 인자로 전달 되게 됩니다.

그 후 Article.objects.get(id=id)와 같은 형태로 하나의 article을 뽑고 이것을 html에 뿌려주게 되는것이지요.

 

 

 

이번 시간에 우리가 하고싶은 것은, 아래 input창에 id값을 입력해서 해당 detail에 접속하는것입니다.

이를 위해 우리가 먼저 알아야할것은  아래 form 내부에 input태그들이 어떻게 동작하는지 알아야합니다.

url 변화

 

1.  2라는 값을 넣고 제출을 눌러봅니다.

 

2. 웹페이지가 번쩍하면서 refresh 되고 아무 변화가 없습니다. 이 걸로는 아무것도 할 수 없겠죠?

 

여기에 추가 해야 되는 것은 input tag안에 name을 넣어 주는 것입니.

아래 코드를 보시면  name='q'가 추가 된 것을 알 수 있죠?  

(query를 나타내는 q를 name에 쓰는 것은 관습적인 것이니 참고하시기 바랍니다. )

 

이번엔 달라진게 있을까요?

다시한번 위 동작을 반복해 봅니다.

url이 위와 같이 변경이 됩니다. 물음표가 추가되고 name과 우리가 입력한 2가 연결되어서 url을 형성한 것을 알 수 있습니다. 

 

 

 

 

 

action 사용

 

form 태그안에는 action이라는 property를 사용할 수 있는데요. 

해당 action이 어떻게 동작 하는지 우선 실행을 통해 확인해보겠습니다.

 

위와 같이 뜬금없이(?) 구글 주소를 action에 넣어보았습니다. 그리고 같은 동작을 바로 실행보죠.

신기하게도 구글 페이지로 화면이 바뀌고 2를 입력한 상태화면이 뜨게됩니다. 

이제 어느 정도 action이 어떻게 동작하는지 감이 오셨을텐데요. 우리 입력한 query가 action에 넣은 주소를 기준으로 작동을 하게 됩니다.

 

아래와 같이 action을 기입하고 "/"를 넣거나 아예 아무거나 넣치 않을 경우는 현재 페이지를 기준으로 url을 생성하게 됩니다.

 

request 인

urls.py

views.py

이번에는 위와 같이 query를 통해 detail 페이지를 구현할 view를 만들어 보려고합니다. 첫번째 인자로 우리 관습적으로 받았던 request는 어떤 값이 담겨 있을까요? 

뭔지 모르겠지만 GET 요청을 의미하는 GET이 보이네요.  아래와 같이 method를 적어주지 않을 경우 Defaul GET요청이란것을  알 수 있습니다. 

한발 더나아가서..

 

그럼 request.GET에는 어떤 값이 담겨있을까요?

아무것도 입력하지 않고 접속할때에는 

2를 입력하면 아래와 같이 QueryDict형태의 딕셔너리를 얻을 수있는데요.

즉 딕셔너리에서 아이디값을 빼온다면 처음에 봤던 detail view를 구현할 수 있겠죠?

우선 request.GET을 딕셔너리로 선언하고 선언한 딕셔너리에서 get 메소드를 통해 q에 있는 value를 담습니다.

 

그 후 value값이 담긴 query를 id값으로 전달하면 하나의 Article을 뽑을 수 있습니다.

참고로 article_search_view 를 실행할때 의 주소가 /articles/가 추가 되었기 때문에, action에 "/articles/"를 추가해줘야 합니다.

최종 결과:

 

 

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글