문제 상황:
Status
테이블에 들어 있는kind
필드의 데이터들을 변수 이름에 활용하고 싶다. 하지만, 새로운 kind가 생길 수도 있으므로, 자동으로 변수가 생성되기를 바란다.
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
에서 넘기는게 안되더라.. 그래서 이는 커스텀 템플릿 태그
를 이용하여 처리해야 한다.
해당 내용은 다른 게시물에 ..
여튼, 성공~