Python Django中利用OrderedDict格式化并展示用户信息
本文介绍如何在Django项目中通过重写__str__方法生成特定格式字符串,并在视图中利用OrderedDict将其解析为有序字典。通过列表推导式提取键值对,最终在HTML模板中以表格形式直观展示用户信息,确保字段顺序与数据库模型定义一致。
核心实现思路
在Django开发中,有时需要以特定的顺序展示模型字段。为了实现这一点,可以通过以下步骤完成:
- 在模型中重写
__str__方法,生成包含字段名和值的格式化字符串。 - 在视图中将该字符串分割,并利用
collections.OrderedDict保持键值对的顺序。 - 在HTML模板中遍历该有序字典,渲染为表格。
模型层:定义输出格式
首先,在 models.py 中定义用户信息模型。通过重写 __str__ 方法,我们可以控制对象转换为字符串时的格式。这里采用“键 值”交替排列的方式,不使用额外的分隔符,仅以空格分割。
def __str__(self):
return "email {0} idcard {1} adress {2} phonenumber {3}".format(
self.email, self.idcard, self.adress, self.phonenumber
)视图层:解析与处理
在 views.py 中,我们需要获取用户信息并将其转换为有序字典。具体步骤如下:
- 使用
@login_required装饰器确保只有登录用户可访问。 - 查询当前用户的信息对象。
- 将每个对象的字符串表示按空格分割,提取键和值。
- 利用
zip函数将键和值配对,并传入OrderedDict以保持顺序。
from collections import OrderedDict as ordic
@login_required
def msg(request):
msg = UserMsg.objects.filter(whoami=request.user)
for item in msg:
msglist = str(item).split(" ")
msgkey = msglist[::2]
msgvalue = msglist[1::2]
msgs = ordic(zip(msgkey,msgvalue))
context = {'msg':msgs}
return render(request, 'usermsg/msg.html', context)上述代码中,msglist[::2] 提取所有键(偶数索引),msglist[1::2] 提取所有值(奇数索引)。通过 zip 将键值对组合,并初始化为 OrderedDict,确保后续遍历顺序与定义一致。
列表推导式辅助验证
在调试过程中,可以使用列表推导式快速查看分割后的结果:
>>[str(i).split() for i in msg][0]
>>>['email', 'xxxxxx@163.com', 'idcard', '12', 'adress', '13', 'phonenumber', '14']模板层:表格展示
最后,在 msg.html 模板中,遍历传入的有序字典 msg,将每个键值对渲染为表格行。同时,为每个字段添加一个“修改”链接。
<table border="0">
{% for key,value in msg.items %}
<br>
<tr>
<td> {{key}} </td>
<td> :{{ value }} </td>
<td> <a href="#" rel="external nofollow" value="change{{ key }}"> 修改{{ key }}
</a> </td>
</tr>
{% endfor %}
</table>通过 {{key}} 和 {{ value }} 分别显示字段名和值,并在最后一列添加修改链接。由于使用了 OrderedDict,表格列的顺序将与模型中定义的顺序一致。
总结
本文展示了如何在Django中利用 OrderedDict 保持用户信息的展示顺序。通过模型层格式化字符串、视图层解析为有序字典、模板层表格渲染,实现了结构清晰且顺序可控的用户信息展示。以上就是使用Python实现生成用户信息的详细内容,更多关于Python Django模板渲染的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









