【问题标题】:Display queried API results on a html page using python django使用 python django 在 html 页面上显示查询的 API 结果
【发布时间】:2018-09-16 10:22:12
【问题描述】:

我目前正在使用 django 网络框架创建一个 python 应用程序,它允许用户查询外部 API 以获取有关食物营养(例如卡路里、脂肪)的信息。目前,当用户在网页的搜索栏中输入食物时,API会被查询并显示在终端中。我正在尝试在网页上显示信息,但无法呈现数据。

form.py

class NutritionForm(forms.Form):
    food = forms.CharField(max_length=100000)

def search(self):
    # result = {}
    food = self.cleaned_data['food']

    headers = {
        'x-app-id': "ff0ccea8",
        'x-app-key': "605660a17994344157a78f518a111eda",
        'x-remote-user-id': "7a43c5ba-50e7-44fb-b2b4-bbd1b7d22632",
        'Content-Type': "application/x-www-form-urlencoded",

    }

    url = 'https://trackapi.nutritionix.com/v2/natural/nutrients'
    body = {
        'query': food,
        'timezone': 'US/Eastern',
    }
    response = requests.request("POST", url, data=body, headers=headers)
    data = response.json()

    print ('food name: ', data['foods'][0]['food_name'])
    print ('food calories: ', data['foods'][0]['nf_calories'])
    print ('food protein: ', data['foods'][0]['nf_protein'])
    print ('food fats: ', data['foods'][0]['nf_total_fat'])

views.py

def nutritionix(request):
    search_result = {}
    if 'food' in request.POST:
        form = NutritionForm(request.POST)
        if form.is_valid():
            search_result = form.search()
    else:
        form = NutritionForm()
    return render(request, 'nutrition/nutrition.html', {'form': form, 'search_results': search_result})

这是我用来尝试显示信息的 html 页面。但是,当我运行搜索时,API 被查询,显示在终端中,但没有显示在网页上。

html

{% block content %}
  <h2>Nutritionix API</h2>

  <form action="" method="post">
      {% csrf_token %}
      {{ form.as_p }}
    <button type="submit">Search Food info</button>
  </form>

    {% block body %}
    <div class="container">
        <p>Food name:  {{ food }}</p>
    </div>
{% endblock %}


{% endblock %}

它没有打印到网页上,我这样做是否正确?

【问题讨论】:

    标签: python html django api


    【解决方案1】:

    search() 方法似乎没有返回任何内容。更改此项以返回结果:

    def search(self):
        ...
        return data['foods'][0]
    

    然后在你的视图中,你可以像这样输出结果:

    <div class="container">
        <p>Food name:  {{ search_results.food_name }}</p>
        <p>Food calories:  {{ search_results.nf_calories }}</p>
    </div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 2014-04-26
      • 2017-05-16
      • 2014-09-06
      • 1970-01-01
      相关资源
      最近更新 更多