本文介绍在Django模板中处理嵌套字典数据的方法。当标准点操作符无法直接获取深层值时,可通过register.filter定义自定义过滤器,并在模板中调用该过滤器,结合JavaScript动态渲染指定键值,简化数据获取流程。
Django模板中获取嵌套字典数据的方法
在Django框架中,前端JavaScript或模板通常使用点操作符来访问字典或列表中的数据,例如通过{{data.0}}或{{data.arg}}的形式提取值。
然而,当数据结构呈现为嵌套类型时,直接提取特定层的值会变得复杂。例如,需要访问的数据结构如下所示:
目标是获取correct键下qxl字段的值。
startArgsSet={"correct":{"qxl":0,"kkx":0},"reliable":{"qxl":0,"kkx":0},"security":{"qxl":0,"kkx":0},"understand":{"qxl":0,"kkx":0},"entropy":{"qxl":0,"kkx":0},
"mature":{"qxl":0,"kkx":0},"active":{"qxl":0,"kkx":0},"service":{"qxl":0,"kkx":0},"file":{"qxl":0,"kkx":0},
"tech":{"qxl":0,"kkx":0},"property":{"qxl":0,"kkx":0},"organize":{"qxl":0,"kkx":0},"develop":{"qxl":0,"kkx":0},
"source":{"qxl":0,"kkx":0},"update":{"qxl":0,"kkx":0},"fix":{"qxl":0,"kkx":0},
"quality":{"qxl":0,"kkx":0},"meanNum":{"qxl":0,"kkx":0},"variance":{"qxl":0,"kkx":0}
}
若强行将数据格式转换为列表中的无嵌套字典形式,处理逻辑会较为繁琐。此时,可以通过定义自定义过滤器来简化数据获取过程。
from django.template.defaulttags import register
@register.filter
def getArgQxlValue(dictionary,arg):
return dictionary[arg]['qxl']
@register.filter
def getArgKkxValue(dictionary,arg):
return dictionary[arg]['kkx']
@register.filter
def getArgName(dictionary,arg):
return dictionary[arg]['name']
在Django模板中,可以按以下方式编写代码:
<!-- the second important page of the project-->
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>超标信息</title>
<script src="{% static 'js/a-mynewjs.js' %}"></script>
</head>
<body>
{{ guestSetArgs|safe }}<br><br><br>
{{ warningdata|safe }}<br><br>
<script>
{% for i in guestSetArgs %}
{% for j in warningdata %}
if("{{i}}"=="{{j}}")
{
if(Number({{warningdata|getArgQxlValue:j}})>Number({{guestSetArgs|getArgQxlValue:i}}))
var setArgStr="{{warningdata|getArgName:i}} 超出阀值 阀值:{{guestSetArgs|getArgQxlValue:j}} 检测值:{{warningdata|getArgQxlValue:j}}<br>"
document.write(setArgStr);
}
{% endfor %}
{% endfor %}
</script>
</body>
</html>
使用类似{{warningdata|getArgQxlValue:j}}的语法,即可成功获取嵌套结构中的目标值。

对代码进行适当的美化与优化。

以上即为本文的核心内容,希望能为读者的学习提供有益参考,同时也欢迎持续关注本站以获取更多技术分享。