IT/Django

django template에서 query string을 href에 넣는 방법.

bepuri 2022. 5. 31. 21:10
728x90

서비스를 개발하다보면 고객을 유인하는데, 가입 후에 특정 주소로 리다이렉트하길 원할 수 있다.

특히나 이 주소가 동적인경우를 위해 이미 http url에서는 next라는 querystring으로 request 처리 후 이동해야할 url을 알려준다.

실제 예시를 들자면, 로그인 후에 6번 매물로 이동하게 하고 싶다면.

https://onepaper.biz/accounts/login/?next=/listings/6/ 으로 다음 url을 정의해줄 수 있다.

이 경우 로그인이 정상적으로 처리되고나서, https://onepaper.biz/listings/6/

[원페이퍼 - 온라인 부동산 계약

비대면 부동산 온라인 계약 서비스. 분실걱정 NO, 계약서 공유 OK. 당신의 계약서를 이제는 온라인으로 관리해보세요.

onepaper.biz](https://onepaper.biz/listings/6/으로)

으로 자동으로 이동한다.

자 그럼, 여기서 next의 필요성과 작동방식은 알았는데, 이걸 특정 페이지의 특정 버튼에 query string으로 넣고 싶을 수도 있다. 실제로 onepaper intro페이지에는 로그인 페이지로 이동하기 위한 버튼이 있는데, 해당 버튼에는 href="/accounts/login"으로 하드 코딩 되어있었다.

이 경우 next query string을 넘겨줘도 로그인 버튼에는 query string이 들어가지 않아서 로그인 페이지로 이동시 next에 대한 query string이 사라져버렸다.

따라서 request.GET에 대한 query string을 버튼 href에 넣어줄 필요가 있는데, 그 경우 아주 간단하게 해결이 가능했다.

<a href="/accounts/login/?{{ request.GET.urlencode }}"> urlencode를 하지 않으면 query dict 그대로 들어가서 제대로 주소창에 입력되지 않는다. 또한 request.GET이 비어있는 경우는 ?는 빼도 되기 때문에 원한다면 if else 구문으로 분기처리해주면 더 깔끔하게 처리 할 수 있다.

 

 

https://docs.djangoproject.com/en/3.2/ref/request-response/#django.http.QueryDict.urlencode

 

Request and response objects | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

- urlencode 참고 문서.

728x90