본문 바로가기

Django

django / template에서 배열 여러개에 인덱스 접근하는 방법, use a variable as index

php, java를 사용하다 djnago를 사용하면서 당면한 또 하나.

for문을 사용할 때 java나 php는 for(int i; i<arr.length; i++) 등의 식으로

for문 안에서 index로 배열에 접근할 수 있었다.

 

근데 django, python은 for문 사용시 for var in arr: 식으로 풀어나가니까 index로 어떻게 접근하지 싶었다.

(지금 하려던게 배열 여러개를 for문 돌려서 배열[i] , 배열2[i], 배열3[i]

이렇게 접근해서 각 배열의 같은 방번호의 value를 꺼내려고 했다.)

 

구글링 결과, for문을 한번에 쓸 수 있는 방법 발견.

django-multiforloop 설치 후 {% load multifor %}로 사용하면 된다던데 나는 계속 오류가 났다.

 

에러내용)

Traceback (most recent call last):
  File "..................\django\template\defaulttags.py", line 1034, in find_library
    return parser.libraries[name]
KeyError: 'multifor'

 

(참고 /  https://pypi.org/project/django-multiforloop/ )

 

그래서 다른방법을 모색.

Custom_template을 만들었는데 해당 파일에 새 함수를 추가했다.

@register.filter(name='index_i')
def index_i(l, i):
    try:
        return l[i]
    except:
        return None

해당 배열의 인덱스를 꺼내는 방법을 찾기 위해 만든 커스텀 함수

 

 

 

 

{% if result.pr_file is not None%}
	{% with result.pr_file|split:"," as files %}
	{% with result.pr_crt_dt|split:"," as crt_dts %}
	{% with result.estate_name|split:"," as estate_names %}
	{% with result.pr_no|split:"," as pr_nos %}
		{% for value in pr_nos|length|ranges %}
			<div>
				<span>{{crt_dts|index_i:value}}</span>
				<span>{{estate_names|index_i:value}}</span>
				<span>
					<a onclick="fff('{{files|index_i:value}}')">버튼</a>
				</span>
				<span>
					<a onclick="fff('{{pr_nos|index_i:value}}','{{result.req_no}}')">버튼2</a>
				</span>
			</div>
		{% endfor %}
	{% endwith %}
	{% endwith %}
	{% endwith %}
	{% endwith %}
{% endif %}

 

 

배열의 길이 length를 구하고 range를 이용해서 각 배열의 갯수만큼 순서대로 방에 접근하도록 for문을 돌림

 

사실 이 방법이 최선인지는 모르겠으나, 일단 처음에 뭣도모르고 4중 for문을 돌리다 이건 아니겠다 싶은 마음에 

소스코드를 줄여보았다. 

 

 

참고사이트 

https://stackoverflow.com/questions/13376576/how-can-i-use-a-variable-as-index-in-django-template

반응형