복붙노트

[PYTHON] Django 템플릿에서 키로 사전 접근하기

PYTHON

Django 템플릿에서 키로 사전 접근하기

내보기에서 템플릿으로 사전을 전달하고 있습니다. 그래서 { "key1": "value1", "key2": "value2"} 전달되고 키, 값 쌍을 통해 반복하지만 괜찮은 솔루션에서 특정 키의보기에 직접 액세스 할 수 없습니다. 예를 들어 bu json.items [ "key1"]와 같이 "key1"이라고 말하십시오. if / then 문을 사용할 수는 있지만 직접 처리하는 방법이 있습니까?

다음은 html 템플릿의 코드 루핑입니다.

{% for key, value in json.items %} 
  <li>{{key}} - {{value}}</li>
 {% endfor %}

해결법

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

    1.Django 템플릿 언어는 다음과 같이 사전 키를 찾는 것을 지원합니다 :

    Django 템플릿 언어는 다음과 같이 사전 키를 찾는 것을 지원합니다 :

    {{ json.key1 }}
    

    변수 및 조회에 대한 템플릿 문서를 참조하십시오.

    템플릿 언어는 key가 변수 인 json [key]를 표시하는 방법을 제공하지 않습니다. 이 스택 오버플로 질문에 대한 답변에서 제안하는 것처럼 템플릿 필터를 작성하여이 작업을 수행 할 수 있습니다.

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

    2.이 문제를 극복하기 위해 다음과 같이 시도해 볼 수 있습니다.

    이 문제를 극복하기 위해 다음과 같이 시도해 볼 수 있습니다.

    def get_context_data(self, **kwargs):
        context['cart'] = []
        cart = Cart()
        cart.name = book.name
        cart.author = book.author.name
        cart.publisher = book.publisher.name
        cart.price = 123
        cart.discount = 12
        cart.total = 100
        context['cart'].append(cart)
        return context
    
    
    class Cart(object):
        """
        Cart Template class
    
        This is a magic class, having attributes
        name, author, publisher, price, discount, total, image
        You can add other attributes on the fly
        """
        pass
    
    
    By this way you can access your cart something like this:
    {% for item in cart %}
        <div class="jumbotron">
        <div>
        <img src="{{item.image}}" />
        <div class="book_name"> <b>{{item.name}}</b></div>
        <div class="book_by"><i>{{item.author}}</i></div>
        <span>Rs. {{item.price}}</span> <i>{{item.discount}}% OFF </i>
        <b>Rs. {{item.total}}</b>
    {% endfor %}
    
  3. ==============================

    3.예를 들어, 아래의 사전을 보내려면 dict = { 'name': 'myname', 'number': 'mynumber'}

    예를 들어, 아래의 사전을 보내려면 dict = { 'name': 'myname', 'number': 'mynumber'}

    조회수 : 리턴 렌더 (request, self.template_name, { 'dict': dict})

    html 템플릿의 값을 렌더링하려면 다음을 수행하십시오.

    {{dict.name}}}

    'myname'을 출력합니다.

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

    4.@Alasdair에 따르면 템플릿 필터를 사용할 수 있습니다. templatetags 디렉토리에서 dict_key.py 파일을 만듭니다.

    @Alasdair에 따르면 템플릿 필터를 사용할 수 있습니다. templatetags 디렉토리에서 dict_key.py 파일을 만듭니다.

    from django.template.defaultfilters import register
    
    @register.filter(name='dict_key')
    def dict_key(d, k):
        '''Returns the given key from a dictionary.'''
        return d[k]
    

    그런 다음 HTML에서 다음과 같이 작성할 수 있습니다.

    {% for k in json.items %} 
      <li>{{ k }} - {{ json.items|dict_key:k }}</li>
    {% endfor %}
    
  5. from https://stackoverflow.com/questions/19745091/accessing-dictionary-by-key-in-django-template by cc-by-sa and MIT license