Django模板遍历嵌套字典无输出无法渲染,如何正确遍历?
问题原因
渲染失败是三个问题共同导致的:
- 你当前绑定的路由默认走
ProjectsView的get方法,这个方法的上下文context里只传了title,既没有包含项目数据,也没有调用general_projects_list方法提取数据。 general_projects_list方法里传递上下文的写法错误,你写的{ general_projects_dict }是把字典对象塞进了集合里,Django模板无法识别对应的变量名,正确的上下文必须是键值对格式的字典。- 模板的遍历逻辑有误,变量名匹配错误,同时取链接的层级也写错了。
修复步骤
第一步:修正视图逻辑
把项目数据整合到get方法的上下文中,修改后的视图代码如下:
from django.views import View class ProjectsView(Mixin, View): def get(self, request, id = None, *args, **kwargs): template = "pages/projects.html" projects = { 0: { "Name": "Suru++ Pastas", "Description": "适用于Unix、BSD系统的Bash可执行工具,用于修改Adwaita++、Suru++、Yaru++图标主题的文件夹配色", "Colaboration": "我复刻了这个项目并做了适配改造,让它可以兼容多款图标主题", "Link": "https://github.com/gusbemacbe/suru-plus-folders", "Tags": ["Makefile", "Shell"] }, 1: { "Name": "Icons Missing Request", "Description": "可执行工具,能读取当前使用的图标主题和Linux桌面文件,检测桌面文件对应的图标是否在主题中存在,自动生成缺失图标请求列表", "Colaboration": "我参与了项目贡献,将工具翻译成了多门外语,降低了不熟悉英语的用户的终端使用门槛", "Link": "https://github.com/gusbemacbe/icons-missing-script", "Tags": ["Shell", "Vala"] }, 2: { "Name": "Ooomox", "Description": "Linux系统配色生成应用,支持生成GTK2、GTK3、GTK4、终端等多场景的配色变体,还可以自定义图标主题的图标、文件夹配色", "Colaboration": "我参与了项目贡献,新增了Adwaita++、Suru++、Yaru++主题的扩展支持,同时将应用翻译成了西班牙语、法语、意大利语、荷兰语、葡萄牙语", "Link": "https://github.com/gusbemacbe/icons-missing-script", "Tags": ["Makefile", "Python", "Shell"] }, } context = { 'title': "项目", 'projects': projects # 直接把项目字典传入上下文,键名projects就是模板里调用的变量名 } return render(request, template, context)
如果你需要保留general_projects_list方法单独使用,也可以在get方法中调用它提取数据,直接整合逻辑相对更简洁。
第二步:修正模板遍历代码
直接遍历上下文传入的projects变量即可,修改后的模板代码:
{% for project_id, project_info in projects.items %} <h3>{{project_info.Name}}</h3> <p>{{project_info.Description}}</p> <p>{{project_info.Colaboration}}</p> <p><b>标签:</b> {% for tag in project_info.Tags %} <span>{{tag}}</span> {% endfor %} </p> <a href="{{project_info.Link}}" class="cyberpunk2077">访问</a> {% endfor %}
内容的提问来源于stack exchange,提问作者Oo'-
相关产品推荐
相关产品推荐

