Django中如何逐个显示对象?现有代码问题求助
解决Django模板循环显示整个QuerySet的问题
嘿,我一眼就瞅出问题出在哪了!你的模板循环逻辑里变量名搞混啦,导致每次循环都把整个QuerySet打印出来,而不是单个按钮对象。
问题根源
你在模板里写的是:
{% for buttons in button %} <!-- 这里错误地用了 {{ button }} 而不是循环里的单个变量 --> {% endfor %}
这里的button是你从自定义模板标签传过来的整个QuerySet集合,而buttons才是每次循环迭代到的单个Button对象。你现在输出{{ button }},自然每次都会把所有按钮的QuerySet打印一遍。
修正方案
把模板里的{{ button }}改成循环变量对应的字段(比如你的Button模型应该有个存储按钮名称的字段,比如name),同时建议把循环变量名改得更清晰,避免和整个集合的变量名混淆:
修正后的home.html代码:
{% for btn in button %} <li class="nav-item"> <a class="nav-link" href=""> <button class="btn" type="submit"> <i class="fa fa-bullhorn" aria-hidden="true"></i> {{ btn.name }} </button> </a> </li> {% endfor %}
额外说明
- 如果你Button模型里的字段不是
name,换成你实际定义的字段名就行(比如title或者button_text)。 - 你的模板标签代码是没问题的,
show_menu()已经正确把所有Button对象的QuerySet传给了模板里的button变量,问题完全出在模板的循环输出部分。
这样改完之后,循环就会逐个遍历QuerySet里的每个Button对象,显示单个按钮的内容啦!
内容的提问来源于stack exchange,提问作者BronzoDev
相关产品推荐
相关产品推荐

