JavaScript獲取Django模板中指定鍵值的數據,使用過濾器


Django中利用js來操作數據的常規操作一般為點(.)操作符來獲取字典或列表的數據,一般如{{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']

在模板中就可以以這樣寫

<!-- 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}}&nbsp;超出閥值&nbsp;&nbsp;閥值:{{guestSetArgs|getArgQxlValue:j}}&nbsp;&nbsp;檢測值:{{warningdata|getArgQxlValue:j}}<br>"
           document.write(setArgStr);
       }
       
    {% endfor %} 
  {% endfor %} 
  
    </script>
</body>
</html>

形如{{warningdata|getArgQxlValue:j}},就可以獲取到里面的值了

 稍做美化

 

 

參考自https://docs.djangoproject.com/en/2.2/howto/custom-template-tags/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM