在Django中使用API​​以及如何显示数据

时间:2019-07-23 23:19:57

标签: django rest django-views

我正在尝试测试如何在Django项目的视图中显示API信息。我知道您可能必须将一些已安装的API添加到INSTALLED APPS设置块中。

此api是一个简单的地理位置。

我是Django的新手,也是第一次使用Django中的API。我已经使用Youtube视频设法按照自己的方式获取了我的应用。但是现在我自己一个人。我有许多不同的视图类来显示我的应用程序的不同之处。

下面的视图是要放置数据的视图。

这是我可能会这样做的方式吗?然后在HTHL中调用{{base}}进行显示?

class PostDetailView(DetailView):
    model = Post
    template_name = 'clients/post_detail.html'

    def api_test(request):
        #  This is where the APIs are going to go.
        requests.get('https://api.coindesk.com/v1/bpi/currentprice.json')
        data = response.json()
        return render(request, 'clients/post_detail.html', {
            'base': data['disclaimer']
        })

我目前在我的应用程序中没有收到任何错误,但是没有显示country元素。

我已经在一个简单的python文件中测试了以下内容

import requests
import json

response = requests.get('https://api.coindesk.com/v1/bpi/currentprice.json')
data = response.json()

print(data['disclaimer'])

将获得所需的结果。所以我想现在我的问题是...如何将其导入HTML?这样我就可以显示API的结果

1 个答案:

答案 0 :(得分:1)

您可以这样写:

class PostDetailView(DetailView):
    model = Post
    template_name = 'clients/post_detail.html'

    def call_geo_api(self):
        #  This is where the APIs are going to go.
        response = requests.get('https://api.coindesk.com/v1/bpi/currentprice.json')
        data = response.json()
        return data['disclaimer']

    def get_context_data(self, *args, **kwargs):
        context = super(PostDetailView, self).get_context_data(*args, **kwargs)
        context['base'] = self.call_geo_api()
        return context

在这里,我重写了get_context_data()方法,该方法负责将上下文数据从视图发送到模板。

在这里,我更改了您的api方法,以便它将从API返回data['disclaimer'],并在get_context_data方法内部,将其注入了上下文。这样就可以解决问题,以便您可以使用{{ base }}在模板中查看数据。