규도자 개발 블로그

Django Template에서 List사용하기 본문

Python/Django

Django Template에서 List사용하기

규도자 (gyudoza) 2019. 10. 24. 18:49

Django Template에서 List사용하기

Django는 JSP나 PHP와는 다르게 Template(html과 로직이 섞여있는 곳) 내에서 자료형을 선언하거나, 백단에서 쓰던 언어를 그대로 쓰는 등의 행위가 굉장히 제한적이다. 그런 데에 있어서 편의성은 PHP가 넘사벽이지만 JSP도 자바로직과 자료형을 그대로 쓸 수 있다는 장점이 있다. 하지만 Django는 그런 면에서는 굉장히 불편하다. 물론 필요한 자료형을 애초에 get request요청시에 context에 담아서 가져올 수 있지만 굳이 그럴 필요가 없이 한 군데에서만 임시적으로 써야하는 자료형이라면? 그때부턴 귀찮음이 몸을 지배하기 시작한다.

 예를 들어 파이썬에서 흔하게 쓰는 List를 템플릿에서 쓰고자 한다면 {% with list = [1, 2, 3, 4, 5]%}~~~ {% endwith %}이렇게 하면 될 것 같지만 어림도 없다. with으로 만든 template 변수에는 숫자와 텍스트, 그리고 페이지를 로드할 때 미리 만들어진 객체만 담을 수 있다. 그럴 때 쓰는 편법이 있다.

{% with list='0 1 2 3 4 5 6 7 8 9 10' %}
	{% for number in list.split %}
		{{number}}<br/>
	{% endfor %}
{% endwith %}

이런식으로 편법을 이용하면 된다. 당연한 얘기지만 맨 윗줄을 {% with '0 1 2 3 4 5 6 7 8 9 10' as list %}로 변경해도 된다. List를 변수에 담을 순 없지만 문자열을 띄어쓰기로 구분하여 Iterable한 형태로 반환해주는 str.split이라는 template function은 작동한다. 그것을 이용한 방법이라고 보면 되겠다. iterable한 자료형을 활용해야 하는데 백단에서 가져올 필요까진 없을 때 활용하면 좋을 것이다.


p.s : 나 같은 경우엔 평점과 리뷰를 남기는 사이트를 제작하고 있는데 사용자가 점수를 책정하는 부분을 만들 때 굳이 백단에서 context에 [1, 2, 3, 4, 5...]라는 단순한 데이터를 가져오고 싶지 않았고 템플릿 내에서 해결하고 싶어서 찾아낸 방법이다. 맨 처음엔 템플릿 내에서 range함수를 써보거나 list 자료형을 선언해보려고 했는데 다 실패했고 이 방법에 도달하였다.

Comments