Django模板不显示循环键、值

Posted

技术标签:

【中文标题】Django模板不显示循环键、值【英文标题】:Django template not displaying looped keys, values 【发布时间】:2017-09-22 15:59:57 【问题描述】:

我对 Django 很陌生,我想弄清楚为什么我可以按预期在模板中调用字典中的键,但是循环遍历字典不会产生任何文本,也不会产生任何错误消息。我不想硬编码键名(即在我的模板中低于msgid,因为字典是动态的,所以我只想循环遍历它。

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 循环不会产生任何文本。我哪里错了?

【问题讨论】:

在你的方法populate_html_text中尝试t.render(context='smsreport_dict':smsreport_dict) @ Jens, ozgur:解决方案是您的两个答案的结合。我需要在我的模板中添加项目,加上 context='smsreport_dict':smsreport_dict。谢谢! 【参考方案1】:

smsreport_dict 应该在您用来渲染模板的Context 内:

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

另外,您在遍历模板中的字典时忘记调用.items

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

【讨论】:

【参考方案2】:

你需要将.items添加到smsreport_dict

MSGID: msgid

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

请参阅here 了解类似情况。

【讨论】:

以上是关于Django模板不显示循环键、值的主要内容,如果未能解决你的问题,请参考以下文章

Django dict键,for循环中的值不起作用

Django:遍历模板中的过滤列表

在 Django 模板中使用 for 循环显示多个 chart.js 图表

在Django模板中使用for循环显示多个chart.js图表

Django如何循环对象并在模板中显示变量

Django:在父模型的详细视图模板中显示外键模型