python 동적 변수 (자동 변수) 생성

파오리·2021년 3월 10일
1

아주 작은 기록

목록 보기
10/13

문제 상황: Status테이블에 들어 있는 kind필드의 데이터들을 변수 이름에 활용하고 싶다. 하지만, 새로운 kind가 생길 수도 있으므로, 자동으로 변수가 생성되기를 바란다.

python 동적 변수

python의 동적 변수는 locals()[]globals()[]를 써서 만들 수 있다. 이름에서 알 수 있듯이 지역 변수와 전역 변수의 차이겠지.

for i in range(1,3):
    globals()['num_{}'.format(i)] = 0
    
print(num_1, num_2) # 0 0

이렇게 중괄호[]안에 변수의 이름을 .format()을 사용하여 만들어주면 된다.

해결

나는 kind필드의 데이터를 활용해서 데이터_data라는 이름의 리스트를 만들고 싶었다.
예를 들어, kind필드에 정보보호 관계 법령, 개인정보보호 관계 법령이라는 데이터가 있으면, 정보보호 관계 법령_data, 개인정보보호 관계 법령_data라는 이름의 리스트 말이다.

# django views.py

from .models import Status


def status(request):
    status = Status.objects.all().order_by('-kind')
    status_kind = status.values_list('kind', flat=True).distinct()
    locals()['{}_data'.format(kind) = []	# 리스트로 선언
    
    for kind in status_kind:
        locals()['{}_data'.format(kind)].append('this is data')
    
    return render(request, 'law-status.html')

이렇게 하면

정보보호 관계 법령_data = ['this is data']
개인정보보호 관계 법령_data = ['this is data']

이렇게 두 리스트가 정의될 것이다.

다만, django에서 이 변수를 html로 넘겨서 사용 하고 싶었으나 이 내용을 views.py에서 넘기는게 안되더라.. 그래서 이는 커스텀 템플릿 태그를 이용하여 처리해야 한다.

해당 내용은 다른 게시물에 ..

여튼, 성공~

profile
경험 == 배움

0개의 댓글