복붙노트

[PYTHON] Django 템플릿에서 변수를 사용하여 dict에 액세스하고 있습니까?

PYTHON

Django 템플릿에서 변수를 사용하여 dict에 액세스하고 있습니까?

내보기 코드는 기본적으로 다음과 같습니다.

context = Context() 
context['my_dict'] = {'a': 4, 'b': 8, 'c': 15, 'd': 16, 'e': 23, 'f': 42 }
context['my_list'] = ['d', 'f', 'e', 'b', 'c', 'a']

그리고 장고 템플릿에서 무엇을하고 싶습니까 :

<ul>
{% for item in my_list %} 
  <li>{{ item }} : {{ my_dict.item }}</li>
{% endfor %} 
</ul>

그리고 나는 이것을 출력하고 싶다 :

<ul> 
  <li> d : 16 </li> 
  <li> f : 42 </li> 
  <li> e : 23 </li> 
  <li> b : 8 </li> 
  <li> c : 15 </li> 
  <li> a : 4 </li> 
</ul> 

그러나 {{my_dict.item}}을 통한 변수 이름에 의한 dict에 대한 참조는 실제로 작동하지 않습니다. 나는 내부적으로 my_dict [item] 대신 my_dict [ 'item']을 사용하고 있다고 생각합니다. 이 문제를 해결할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.내장 된 방법이 없기 때문에 간단한 템플릿 필터를 써야합니다 : http://code.djangoproject.com/ticket/3371

    내장 된 방법이 없기 때문에 간단한 템플릿 필터를 써야합니다 : http://code.djangoproject.com/ticket/3371

  2. ==============================

    2.제안 된 답변의 사용 사례입니다.

    제안 된 답변의 사용 사례입니다.

    이 예제에서는 뷰에서 표 형식의 데이터를 출력하기위한 일반 템플릿을 만들었습니다. 컨텍스트 [ "columnMeta"]에서 열에 대한 메타 데이터가 보관됩니다.

    이것은 사전이기 때문에 키를 순서대로 출력 할 수는 없으므로 이에 대한 별도의 목록에 키가 있습니다.

    내 view.py :

    
    c["columns"] = ["full_name","age"]
    c["columnMeta"] = {"age":{},"full_name":{"label":"name"}}
    

    내 templatetags 파일에서 :

    
    @register.filter
    def getitem ( item, string ):
      return item.get(string,'')
    

    내 템플릿 :

    <tr>
    <!-- iterate columns in order specified -->
    {% for key in columns %}
    <th>
     <span class="column-title">
        <!-- look label in meta dict.  If not found, use the column key -->
       {{columnMeta|getitem:key|getitem:"label"|default:key}}
      </span>
    </th>
    {% endfor %}</tr>
    
  3. ==============================

    3.사전의 키와 값을 표시하려면 다음과 같이하십시오.

    사전의 키와 값을 표시하려면 다음과 같이하십시오.

    {% for key, value in your_dict.items %}
        {{ key }}: {{ value }}
    {% endfor %}
    

    https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

  4. ==============================

    4.필자의 필요에 따라 dicts, 목록 및 튜플에 사용할 수있는 단일 템플릿 필터가 필요했습니다. 그래서, 여기 제가 사용하는 것이 있습니다 :

    필자의 필요에 따라 dicts, 목록 및 튜플에 사용할 수있는 단일 템플릿 필터가 필요했습니다. 그래서, 여기 제가 사용하는 것이 있습니다 :

    @register.filter
    def get_item(container, key):
        if type(container) is dict:
            return container.get(key)
        elif type(container) in (list, tuple):
            return container[key] if len(container) > key else None
        return None
    
  5. from https://stackoverflow.com/questions/2067006/accessing-a-dict-by-variable-in-django-templates by cc-by-sa and MIT license