Django中遍历含单个字典的列表无法渲染数据,请求技术指导
Django模板渲染API数据异常排查与解决
问题背景
开发Django应用时,通过API获取数据并解析为JSON,返回结果是包含单个字典的列表。视图层代码如下:
def home(request): import requests import json #### api_request=requests.get("xyz...URL") try: api=json.loads(api_request.content) except Exception as e: api="Error" return render(request, 'home.html',{"api": api})
最初使用{{api.values}}能正常渲染出数据:
[{'A': 53875881, 'B': 'cl', 'CH': -0.38, 'CHP': -0.00216, 'CLP': 175.46}]
但想要将数据按分行键值对格式展示时,尝试的两种模板代码均返回空白页面。
问题排查
第一种模板错误点:
外层循环{% for element in api %}遍历列表是正确的,但内层循环误用了api.items——api是列表类型,没有items()方法,应该遍历当前循环的element(即列表中的字典)的键值对。第二种模板错误点:
直接对api(列表类型)调用items()方法,列表不存在该方法,导致循环逻辑不执行,页面无输出。
正确实现方法
针对返回的是单个字典的列表这一结构,正确的模板逻辑应该是:先判断是否为错误状态,若为正常数据,先取出列表中的唯一字典,再遍历其键值对。同时可以添加格式优化让输出更规整:
{% extends 'base.html' %} {% block content %} {% if api %} {% if api == "Error" %} <p>检查你的ticker symbol</p> {% else %} <!-- 取出列表中的第一个字典元素 --> {% with data=api.0 %} <pre> {% for key, value in data.items %} {{ key|ljust:4 }}: {{ value }} {% endfor %} </pre> {% endwith %} {% endif %} {% endif %} {% endblock %}
说明:
- 使用
api.0直接获取列表中的第一个字典元素; {% with %}标签简化变量引用;{{ key|ljust:4 }}使用Django过滤器让键左对齐,保证输出格式整齐;<pre>标签保留换行和空格,让输出符合预期格式。
内容的提问来源于stack exchange,提问作者Raghavan vmvs
相关产品推荐
相关产品推荐

