Django调用外部网页数据后模板循环仅指定条目显示问题咨询
问题原因
你当前仅拉取了名称为multi-storey的单个停车场的接口数据,且将这份数据作为全局变量传入模板,在循环渲染所有停车场条目时都插入了该全局变量,自然所有条目都会显示同一份接口返回内容。
解决步骤
1. 修改views.py逻辑
你需要先把接口返回的字节类型JSON数据解析为Python字典,再将实时数据绑定到对应名称的停车场对象上,避免全局共用同一份数据:
from django.shortcuts import render from .models import Carpark, Campus from urllib.request import urlopen import json def index(request): campus_list = Campus.objects.all() carpark_list = Carpark.objects.all() noparking = Campus.objects.filter(carpark=None) # 拉取接口数据并解析为字典 api_response = urlopen("https://mbezbradica.pythonanywhere.com/carparks/multi-storey").read() real_time_data = json.loads(api_response.decode('utf-8')) # 遍历停车场列表,仅给名称匹配的停车场绑定实时空余车位数据 for carpark in carpark_list: if carpark.name == real_time_data['carpark_name']: carpark.available = real_time_data['spaces_available'] else: carpark.available = None context = { 'carpark_list': carpark_list, 'campus_list': campus_list, 'noparking': noparking } return render(request, "parkatdcu/index.html", context)
2. 修改模板渲染逻辑
仅在停车场存在实时空余车位数据时才渲染对应内容:
<h1>Welcome to ParkAtDCU</h1> {% for campus in campus_list %} <h2>{{ campus }}</h2> {% if campus in noparking %} 未找到停车场 {% else %} <ul> {% for carpark in carpark_list %} {% if campus == carpark.campus_id %} <li> {{ carpark.name }}: 共{{ carpark.spaces}}个车位, {{carpark.disabled_spaces}}个无障碍车位 {% if carpark.available is not None %} ,当前空余车位:{{ carpark.available }} {% endif %} </li> {% endif %} {% endfor %} </ul> {% endif %} {% endfor %}
如果后续需要对接多个停车场的实时接口,只需在视图层循环请求对应接口、解析后绑定到对应停车场对象即可,无需修改模板逻辑。
内容的提问来源于stack exchange,提问作者Leonardo Shehu
相关产品推荐
相关产品推荐

