티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Django template how to look up a dictionary value with a variable

Django 템플릿에서 변수를 사용하여 딕셔너리 값을 찾는 방법

 문제 내용 

mydict = {"key1":"value1", "key2":"value2"}

The regular way to lookup a dictionary value in a Django template is {{ mydict.key1 }}, {{ mydict.key2 }}. What if the key is a loop variable? ie:

Django 템플릿에서 딕셔너리 값을 찾는 일반적인 방법은 `{{ mydict.key1 }}, {{ mydict.key2 }}`와 같이 사용하는 것입니다. 그렇다면 만약 키가 루프 변수라면 어떻게 해야 할까요? 예를 들어:
{% for item in list %} # where item has an attribute NAME
  {{ mydict.item.NAME }} # I want to look up mydict[item.NAME]
{% endfor %}

 

mydict.item.NAME fails. How to fix this?

mydict.item.NAME가 작동하지 않습니다. 이를 어떻게 고칠 수 있을까요?

 

 

 

 높은 점수를 받은 Solution 

Write a custom template filter:

커스텀 템플릿 필터를 작성하세요.
from django.template.defaulttags import register
...
@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)

 

(I use .get so that if the key is absent, it returns none. If you do dictionary[key] it will raise a KeyError then.)

(저는 키가 없을 경우에는 None이 반환되도록 .get을 사용합니다. dictionary[key]를 사용하면 KeyError가 발생합니다.)

 

usage:

사용 방법:
{{ mydict|get_item:item.NAME }}

 

 

 가장 최근 달린 Solution 

Environment: Django 2.2

환경: Django 2.2

 

  1. Example code:
예시 코드:
# coding=utf-8
from django.template.base import Library

register = Library()


@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)

 

I put this code in a file named template_filters.py in my project folder named portfoliomgr

저는 'template\_filters.py' 파일을 'portfoliomgr'이라는 프로젝트 폴더에 넣었습니다.

 

  1. No matter where you put your filter code, make sure you have __init__.py in that folder
  2. Add that file to libraries section in templates section in your projectfolder/settings.py file. For me, it is portfoliomgr/settings.py
2. 필터 코드를 어디에 두느냐에 상관없이 해당 폴더에 **init**.py 파일이 있어야 합니다. 그
3. 파일을 프로젝트 폴더의 settings.py 파일에서 템플릿 섹션 라이브러리 섹션에 추가하세요. 저는 portfoliomgr/settings.py 입니다.
{{ mydict|get_item:item.NAME }}
  •  
 {% load template_filters %} 

 

 

출처 : https://stackoverflow.com/questions/8000022/django-template-how-to-look-up-a-dictionary-value-with-a-variable

반응형
댓글
공지사항
최근에 올라온 글