You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:27:01