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

如何在Django中将两个API数据渲染到同一个模板中

解决Django同一页面调用两个API并渲染数据的问题

问题根源

你当前的HomePage类视图里的home和other方法不会被自动触发,因为TemplateView默认通过get_context_data方法向模板传递上下文数据,而非自定义方法。同时两个接口返回的数据类型不同(一个是字典、一个是列表),用同一个response变量传递会覆盖数据,导致模板无法正确渲染。

修改后的代码实现

views.py

import requests
from django.views.generic import TemplateView

class HomePage(TemplateView):
    template_name = 'home.html'

    def get_context_data(self, **kwargs):
        # 调用父类方法获取基础上下文
        context = super().get_context_data(**kwargs)
        
        # 获取全球总数API数据
        world_total_response = requests.get('https://api.covid19api.com/world/total').json()
        # 获取南非指定日期的确诊数据
        sa_stats_response = requests.get('https://api.covid19api.com/country/south-africa/status/confirmed?from=2020-09-06T00:00:00Z&to=2020-09-11T00:00:00Z').json()
        
        # 将两个接口数据存入上下文,用不同变量名区分
        context['world_total'] = world_total_response
        context['sa_stats'] = sa_stats_response
        
        return context

home.html

{% extends '_base.html' %}

{% block page_title %} Covid19 Statistics {% endblock %}

{% block content %}

<br>
<br>

<h3 class="text-center">World Total Statistics </h3>
<br>

<div class="container">
    <div class="card-group">
        <div class=" col-md-4">
            <div class="card text-white bg-secondary mb-3" style="max-width: 20rem;">
                <div class="card-body">
                    <h5 class="card-title text-center">Total Confirmed: {{ world_total.TotalConfirmed }}</h5>
                </div>
            </div>
        </div>

        <div class=" col-md-4">
            <div class="card text-white bg-secondary mb-3" style="max-width: 20rem;">
                <div class="card-body">
                    <h5 class="card-title text-center">Total Deaths: {{ world_total.TotalDeaths }}</h5>
                </div>
            </div>
        </div>

        <div class=" col-md-4">
            <div class="card text-white bg-secondary mb-3" style="max-width: 20rem;">
                <div class="card-body">
                    <h5 class="card-title text-center">Total Recovered: {{ world_total.TotalRecovered }}</h5>
                </div>
            </div>
        </div>
    </div>
</div>

<br><br>

<h4 class="text-center">Get Statistics For a Specific Country </h4>

{% for object in sa_stats %}
<div class="card text-light bg-dark" style="width: 35rem;">
    <h3 class="card-header"></h3>
    <div class="card-body">
      <p class="card-text">{{ object.Country }} </p>
      <p class="card-text">{{ object.Date }} </p>
    </div>
  </div>
{% endfor %}

{% endblock%}

urls.py(无需修改)

urlpatterns = [
    path('home', HomePage.as_view(), name='home')
]

关键说明

  • get_context_data是TemplateView用于构建模板上下文的核心方法,必须重写它来添加自定义数据。
  • 用不同的变量名(world_total和sa_stats)存储两个接口的数据,避免覆盖冲突。
  • 全球总数API返回的是单条字典数据,模板中直接通过键名访问字段;南非数据返回的是列表,需要用for循环遍历渲染。

内容的提问来源于stack exchange,提问作者Batool Ragayah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:21:35