【问题标题】:How to use external django API data in html dropdown如何在 html 下拉列表中使用外部 django API 数据
【发布时间】:2018-02-10 22:04:51
【问题描述】:

我有一个提供 json 数据的 API。我想从该 json 中获取一些值,并将其列为我的 HTML 的下拉列表。我需要为此创建一个表格吗?

例如,我有一个 URL,http://netbox.com/api/deviceroles,它提供了一个 json 文件,我想从中提取名称。 deviceroles 将包含名称的所有值。

views.py

import json, urlib
def home(request):
    if request.method == 'GET'
        url = "http://netbox.com/deviceroles"
        response = urllib.urlopen(url)
        data = json.loads(response.read())
        for i in range (0, len (data['results'])):
            deviceroles = data['results'][i]['name']
    return render(request,"base.html")

base.html

<div class="em-c-field">
  <label for="file" class="em-c-field__label">Device Role</label>
   <div class="em-c-field__body">
    <select class="em-c-select em-c-select" id="file" placeholder="Placeholder">
    <optgroup>
    <option value="" disabled="disabled" selected="selected">please select a device role</option>

    </optgroup>
</select>
</div>

【问题讨论】:

    标签: html json django python-2.7 django-rest-framework


    【解决方案1】:

    如果你使用 Django 的内置模板,你可以这样做:

    <select class="em-c-select em-c-select" id="file" placeholder="Placeholder">]
        {% for devicerole in deviceroles %}
        <optgroup>
            <option value="{{ devicerole }}" disabled="disabled" selected="selected">{{ devicerole }}</option>
        </optgroup>
        {% endfor %}
    </select>
    

    views.py 到

    import json, urlib
    def home(request):
        deviceroles = list()
        if request.method == 'GET'
            url = "http://netbox.com/deviceroles"
            response = urllib.urlopen(url)
            data = json.loads(response.read())
    
            for i in range(0, len(data['results'])):
                devicerole = data['results'][i]['name']
                deviceroles.append(devicerole)
        return render(request,"base.html", {'deviceroles': deviceroles})
    

    【讨论】:

    • 我试过了。但它没有显示任何下拉。视图有问题吗?
    • 改成:return render(request,"base.html") 查看return render(request,"base.html", {'data': data})
    • 仍然无法正常工作。我是否正确使用了 get 方法。我还需要为此创建一个表单吗?
    • 搞砸了。对不起。更改返回 render(request,"base.html", {'deviceroles': deviceroles})
    • 现在显示下拉菜单。但是只显示一个名字(json 列表中的姓氏)并且垂直显示,我无法选择任何东西
    猜你喜欢
    • 2020-03-26
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多