访问Django模板中列表中的字典值

时间:2018-04-02 10:43:08

标签: django django-templates

我在列表中有一个字典。我想访问django模板中的字典值。我怎么能得到它? views.py

def payment_status(request):
    l1=[]
    cand = CandidateDetail.objects.all()


    for person in cand:
        for num in range(0,paid['count']):
            if paid['items'][num]['email']==person.email and paid['items'] 
            [num]['status']=='authorized':
                cand_dict = {'first_name':person.first_name, 
                'last_name':person.last_name, 'email':person.email, 
                 'paid':'Yes'}
                l1.append(cand_dict)


    return render(request, 'desk/payment_status.html',{'cand_list':l1})

html文件

<div class="col-md-10">
      <h3>Candidate Payment Status</h3>
      <table class="cand_list">
        <tr>
          <th>Name</th>
          <th>Email</th>
          <th>Payment Status</th>
        </tr>

        {% for candidate in cand_list %}
      <tr>
        <td>{{ candidate.first_name }} {{ candidate.last_name }}</td>
        <td>{{ candidate.email }}</td>
        <td>{{ candidate.paid }}</td>
      </tr>
    {% endfor %}
      </table>
</div>

我得到的错误是 - 无法解析余数:'[item] ['first_name']'来自'cand_list [item] ['first_name']'

3 个答案:

答案 0 :(得分:1)

首先,迭代某事物的长度是从不正确的事情 - 无论是在Python中还是在模板中。

其次,在Django模板语言中,你总是使用点表示法,即使对于字典键也是如此。

所以,在你看来:

for person in cand:
    for item in paid['items']:
        if item['email']== person.email and item['status']=='authorized':
             ....

并在您的模板中:

    {% for item in cand_list %}
    <tr>
      <td>{{ item.first_name }} {{ item.last_name }}</td>
      <td>{{ item.email }}</td>
      <td>{{ item.paid }}</td>
    </tr>
    {% endfor %}

答案 1 :(得分:0)

您可以使用{{mydict.key}}

docs

 {% for candidate in cand_list %}
    <tr>
      <td>{{ candidate.first_name }} {{ candidate.last_name }}</td>
      <td>{{ candidate.email }}</td>
      <td>{{ candidate.paid }}</td>
    </tr>
    {% endfor %}

答案 2 :(得分:0)

你不需要cand_len列表,只需循环遍历cand_list(dict列表)并使用dict键访问。

<div class="col-md-10">
      <h3>Candidate Payment Status</h3>
      <table class="cand_list">
        <tr>
          <th>Name</th>
          <th>Email</th>
          <th>Payment Status</th>
        </tr>

        {% for item in cand_list %}
        <tr>
          <td>{{ item.first_name }} {{ item.last_name }}</td>
          ..
          ..
        </tr>
        {% endfor %}
      </table>
</div>