将项目循环到Django 1.8模板

时间:2018-03-08 06:04:09

标签: python django github-api

我有这个方法:

def profile(request):
    parsedData = []
    if request.method == 'POST':
        username = request.POST.get('user')
        req = requests.get('https://api.github.com/users/' + username + '/repos') 
        jsonList = []
        jsonList=req.json()
        userData = {}
        for data in jsonList:
            userData['html_url'] = data['html_url']
            userData['created_at'] = data['created_at']
            userData['updated_at'] = data['updated_at']
            userData['forks_count'] = data['forks_count']
        parsedData.append(userData)
    return render(request, 'app/profile.html', {'data': parsedData})

此代码会查看此githubtraining

之类的网址

正如您所看到的,响应包含大量存储库,但并非每个github用户都有超过1个存储库。

无论如何,在我的html视图中我有这个:

  <div class="table-responsive">
      <table class="table table-bordered table-hover table-striped tablesorter">
          <thead>
          <tr>
            <th class="header"> Url <i class="icon-sort"></i></th>
            <th class="header"> Created at <i class="icon-sort"></i></th>
            <th class="header"> Updated at <i class="icon-sort"></i></th>
            <th class="header"> Forks count <i class="icon-sort"></i></th>
          </tr>
      </thead>
      <tbody>

      {% for key in data %}
          <tr>
              <td>{{ key.html_url }}</td>
              <td>{{ key.created_at }}</td>
              <td>{{ key.updated_at }}</td>
              <td>{{ key.forks_count }}</td>
          </tr>
      {% endfor %}

      </tbody>
      </table>
  </div>

那会怎么样?那么,现在,例如,如果我查询githubtraining用户查看它的回购,它只显示最后一个用户,那个和其他每个用户,所以,我在这里做错了什么?循环在那里,我错过了什么?

1 个答案:

答案 0 :(得分:2)

只有在视图中完成forloop后才能附加数据。您需要在每次迭代后附加它:

for data in jsonList:
    userData = {}
    userData['html_url'] = data['html_url']
    userData['created_at'] = data['created_at']
    userData['updated_at'] = data['updated_at']
    userData['forks_count'] = data['forks_count']
    parsedData.append(userData)

使用您当前的代码:

userData = {} 
for data in jsonList:
    userData['html_url'] = data['html_url']
    userData['created_at'] = data['created_at']
    userData['updated_at'] = data['updated_at']
    userData['forks_count'] = data['forks_count']
parsedData.append(userData)

new userData会覆盖前一个用于循环的内容。当循环完成时,列表中只有一条记录。