Django中如何逐个渲染字典类型的技能字段数据?
Django技能字段(字典格式)逐个展示解决方案
问题分析
技能字段存储为字典(如{"Python": "熟练", "Django": "精通"}),模板直接输出会显示完整字典字符串,无法逐个展示技能条目。以下分两种场景给出解决方法:
场景1:技能字段为JSONField(Django 3.1+支持)
如果你的Profile模型使用JSONField存储技能字典,直接在模板中遍历字典的键值对即可。
模型示例(models.py)
from django.db import models from django.contrib.auth.models import User class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) skills = models.JSONField(default=dict) # 存储字典格式数据 # 其他字段...
视图示例(views.py)
from django.shortcuts import render from .models import Profile def profile_view(request): profile = Profile.objects.get(user=request.user) return render(request, 'profile.html', {'profile': profile})
修改后的模板代码(profile.html)
要展示技能名称和对应熟练度:
<h3>我的技能</h3> <ul> {% for skill_name, proficiency in profile.skills.items %} <li>{{ skill_name }}: {{ proficiency }}</li> {% empty %} <li>暂无技能信息</li> {% endfor %} </ul>
如果只需展示技能名称,遍历字典的keys:
<h3>我的技能</h3> <ul> {% for skill_name in profile.skills.keys %} <li>{{ skill_name }}</li> {% empty %} <li>暂无技能信息</li> {% endfor %} </ul>
场景2:技能字段为TextField(存储JSON字符串)
如果技能是用普通文本字段存储的JSON字符串,需要先在模型中添加解析方法,再在模板中使用。
修改模型(models.py)
import json from django.db import models from django.contrib.auth.models import User class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) skills = models.TextField(default='{}') # 存储JSON格式字符串 @property def parsed_skills(self): # 解析JSON字符串为字典,处理解析失败的情况 try: return json.loads(self.skills) except json.JSONDecodeError: return {}
模板代码(profile.html)
<h3>我的技能</h3> <ul> {% for skill_name, proficiency in profile.parsed_skills.items %} <li>{{ skill_name }}: {{ proficiency }}</li> {% empty %} <li>暂无技能信息</li> {% endfor %} </ul>
内容的提问来源于stack exchange,提问作者KipronoKirui
相关产品推荐
相关产品推荐

