Flask+Jinja中如何获取并展示API返回的全部嵌套数据
解决嵌套数据获取与模板展示问题
1. 调整Park模型结构
不要将活动名称拼接成字符串,而是在模型中定义列表类型字段存储所有活动名称,示例:
class Park: def __init__(self, name, activities=None): self.name = name self.activities = activities or [] # 用列表存储所有活动名称
2. 从NPS API提取所有活动数据
调用API后,遍历返回的activities数组,提取每个活动的名称存入Park实例的列表:
import requests def fetch_park_data(): api_url = "你的NPS API接口地址" response = requests.get(api_url) park_data = response.json() parks = [] for item in park_data["data"]: # 遍历activities数组,提取每个活动的name字段 activity_names = [act["name"] for act in item.get("activities", [])] park = Park( name=item["fullName"], activities=activity_names ) parks.append(park) return parks
3. Flask视图传递数据到模板
在视图函数中获取处理后的Park列表,传给Jinja模板:
from flask import Flask, render_template app = Flask(__name__) @app.route('/parks') def show_parks(): parks = fetch_park_data() return render_template('parks.html', parks=parks)
4. Jinja模板循环展示活动
在模板中通过双层循环遍历公园列表和每个公园的活动列表:
<!-- parks.html --> <h1>国家公园活动列表</h1> {% for park in parks %} <div class="park"> <h2>{{ park.name }}</h2> <h3>可参与活动:</h3> <ul> {% for activity in park.activities %} <li>{{ activity }}</li> {% endfor %} </ul> </div> {% endfor %}
排查要点
- 若模板无内容,先在视图函数中打印
park.activities确认是否获取到数据; - 核对API返回的字段名是否正确,比如部分接口可能用
activity而非activities。
内容的提问来源于stack exchange,提问作者museum
相关产品推荐
相关产品推荐

