Django模板不显示循环键,值

时间:2017-04-25 14:49:34

标签: python django django-templates

我对Django很新,并且我想弄清楚为什么我可以按照预期在模板中调用dict中的键,但循环遍历dict不会产生任何文本,也不会产生任何错误消息。我不想对密钥名称进行硬编码(即在我的模板中msgid下方,因为dict是动态的,所以我只想循环它。

views.py

class Pymat_program(View):
    def get(self, request, *args, **kwargs):
        selected_xml = 'a_directory_to_my_file'
        smsreport_dict = self.parse_xml_file(selected_xml)
        html = self.populate_html_text(smsreport_dict)

        return HttpResponse(html)

    def populate_html_text(self, smsreport_dict):
        t = get_template('template2.html')
        html = t.render(smsreport_dict)

        return html

template2.html

    <p>MSGID: {{ msgid }}</p>

    <p> Begin
    {% for key, value in smsreport_dict %}
        <tr>
            <td> Key: {{ key }} </td> 
        </tr>
    {% endfor %}
    </p>End

在template2.html中,您可以看到被调用的msgid值(smsreport_dict中的几个值之一),该值显示在我的页面上。但由于某种原因,smsreport_dict循环不会产生任何文本。我哪里错了?

2 个答案:

答案 0 :(得分:2)

smsreport_dict应位于您使用的Context内以呈现模板:

...
html = t.render(Context({"smsreport_dict": smsreport_dict}))
...

另外,在模板中迭代dict时忘记调用.items

{% for key, value in smsreport_dict.items %}
  ...

答案 1 :(得分:0)

您需要将.items添加到smsreport_dict

  

MSGID:{{msgid}}

<p> Begin
{% for key, value in smsreport_dict.items %}
    <tr>
        <td> Key: {{ key }} </td> 
    </tr>
{% endfor %}
</p>End

有关类似情况,请参阅here