안녕하세요!
오늘은 request.GET 사용 시 MultiValueDictKeyError 에러가 뜰 때 해결 방법을 실습하겠습니다.
프로그램을 작성하다 보면 GET 메소드를 이용해 페이지를 이동하거나 표시하는 일이 종종 생깁니다.
object를 받아서 사용할 때 따로 표시해줄 필요가 있을 때 보통 사용하는데요.
이때 GET으로 받은 파라미터가 있을 때, 해당하는 파라미터를 view에서 전달받아
ORM을 통한 필터 처리로 템플릿을 띄워주고 GET으로 파라미터를 받지 않을 때는 인덱스 페이지를 보여줍니다.
이전 게시글에서 request.GET.get이라는 메소드를 사용했는데
form 메소드 중에 GET으로 데이터를 보내면 Submit 된 값들은 request.GET이라는 객체에
딕셔너리(사전) 형태로 들어갑니다.
이것은 django에서 제공하는 QueryDict이라는 곳에 Key:Value 형태로 저장됩니다.
URL/?month=1
위와 같은 파라미터 값을 받았다면,
request.GET에는
{ 'month' : ['1'] }
이렇게 들어가게 되고 print로 출력하면
<QueryDict: {'month': ['1']}>
이런 식으로 출력됩니다.
request.GET / request.GET.get 차이점
이렇게 request.GET으로 value 값을 받아서 사용하려고 봤더니 이런식으로 MultiValueDictKeyError가 발생하곤 합니다.
이것은 request.GET과 request.GET.get 모두 딕셔너리 형태로 저장하지만,
request.GET과 request.GET.get 이 value를 받아오는 과정에서 문제가 생기는 것인데요.
request.GET은 페이지가 로드될 때 GET 값을 가져오고, request.GET.get은 request.GET 요청이 왔을 때 값을 가져옵니다.
이 말인 즉, 아직 넘겨줄 GET 방식의 데이터를 보내지도 않았는데 request.GET은 그것을 로드하기 때문에
MultiValueDictKeyError가 발생하게 됩니다.
request.GET.get은 GET 요청이 발생할 때 값을 가져오기 때문에 get으로 전달할 데이터가 있다면
request.GET.get ['month'] 이런 식으로 처리해주시면 에러를 해결할 수 있습니다.
오늘은 request.GET과 request.GET.get의 차이와 MultiValueDictKeyError 에러 해결 방법에 대해서 알아봤습니다.
고생하셨습니다!
'Framework > Django' 카테고리의 다른 글
[Django] 리눅스(우분투)에 장고와 아파치 설치 및 연동하기-(1)(wsgi) (0) | 2021.06.30 |
---|---|
[Django] Form과 ModelForm에 대해 알아보고 form.save(), form.save(commit=False) 차이점 알아보기 (0) | 2021.03.24 |
[Django] Select option 선택한 옵션으로 이동하고 선택한 값 GET으로 받기, 월별 데이터 출력하기 (2) | 2021.03.17 |
[Django] Django에서 Page에 대해 알아보고 페이징 처리하기 Pagination (2) | 2021.02.24 |
[Django] Django 게시판 구현하기(3) Sign Up, Login, Logout, Style 추가 (0) | 2021.02.23 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!