2016-04-15 104 views
0

我在我的django应用程序中进行api调用。答案是json。目前我正在循环浏览模板中的数据并显示表格中的所有数据。在Django中处理Json响应

image_url以外的所有数据均显示在表格中。 image_url有一个JPG路径。这种类型的json需要与正常的string不同吗?

我注意到有几个字段缺少数据,我无法弄清楚为什么这几个字段缺少数据和字段之前,他们都工作正常。

这是JSON对象之一

[ 
    { 
    "name": "_____", 
    "id": "_____", 
    "url": "https://api.deckbrew.com/mtg/cards/_____", 
    "store_url": "http://store.tcgplayer.com/magic/unhinged/_____?partner=DECKBREW", 
    "types": [ 
     "creature" 
    ], 
    "subtypes": [ 
     "shapeshifter" 
    ], 
    "colors": [ 
     "blue" 
    ], 
    "cmc": 2, 
    "cost": "{1}{U}", 
    "text": "{1}: This card's name becomes the name of your choice. Play this ability anywhere, anytime.", 
    "power": "1", 
    "toughness": "1", 
    "formats": {}, 
    "editions": [ 
     { 
     "set": "Unhinged", 
     "set_id": "UNH", 
     "rarity": "uncommon", 
     "artist": "Ron Spears", 
     "multiverse_id": 74252, 
     "flavor": "{1}: This card's flavor text becomes the flavor text of your choice. (This ability doesn't work because it's flavor text, not rules text (but neither does this reminder text, so you figure it out).)", 
     "number": "23", 
     "layout": "normal", 
     "price": { 
      "low": 0, 
      "median": 0, 
      "high": 0 
     }, 
     "url": "https://api.deckbrew.com/mtg/cards?multiverseid=74252", 
     "image_url": "https://image.deckbrew.com/mtg/multiverseid/74252.jpg", 
     "set_url": "https://api.deckbrew.com/mtg/sets/UNH", 
     "store_url": "http://store.tcgplayer.com/magic/unhinged/_____?partner=DECKBREW" 
     } 
    ] 
    }, 

这是我如何在视图中

def graphs(request): 
    if request.user.is_authenticated(): 
     data = [] 
     r = requests.get('https://api.deckbrew.com/mtg/cards') 
     jsonList = r.json() 
     for cards in jsonList: 
      data.append(cards) 
     return render(request, 'graphs/graphs.html', {'data': data}) 
    else: 
     return redirect('index') 

这是我如何在模板 标志着我访问数据处理数据那些失踪的人。

  {% for card in data %} 
      <tr> 
      <td>{{ card.name }}</td> 
      <td>{{ card.id }}</td> 
      <td>{{ card.url }}</td> 
      <td>{{ card.store_url }}</td> 
      <td>{{ card.types }}</td> 
      <td>{{ card.subtypes }}</td> 
      <td>{{ card.colors }}</td> 
      <td>{{ card.cmc }}</td> 
      <td>{{ card.cost }}</td> 
      <td>{{ card.text }}</td> 
      <td>{{ card.power }}</td> 
      <td>{{ card.toughness }}</td> 
      <td>{{ card.formats }}</td> 
      <td>{{ card.editions }}</td> 
      <td>{{ card.set }}</td>  # MISSING 
      <td>{{ card.set_id }}</td> # MISSING 
      <td>{{ card.rarity }}</td> # MISSING 
      <td>{{ card.artist }}</td> # MISSING 
      <td>{{ card.multiverse_id 
      <td>{{ card.flavor }}</td> # MISSING 
      <td>{{ card.number }}</td>  # MISSING 
      <td>{{ card.layout }}</td>  # MISSING 
      <td>{{ card.price }}</td>  # MISSING 
      <td>{{ card.low }}</td>   # MISSING 
      <td>{{ card.median }}</td>  # MISSING 
      <td>{{ card.high }}</td>  # MISSING 
      <td>{{ card.url }}</td> 
      <td>{{ card.image_url }}</td> # MISSING 
      <td>{{ card.set_url }}</td>  # MISSING 
      <td>{{ card.store_url }}</td> 
      </tr> 
      {% endfor %} 

enter image description here

+0

对不起,我失去了你。你说响应是json,但你的视图函数中的响应显然是html? – Wtower

+0

第一个代码块是json。然后在我看来,我把json放在了一个列表中。然后我在html模板中访问它 – wuno

+0

我复制并粘贴了json中的第一个对象。这是我的代码。你说这里的问题是我得到的JSON响应是不是有效的JSON? – wuno

回答

1

他们不是失踪,他们是不是card一部分,他们的editions对象的一部分,所以你需要遍历该列表。

{% for card in data %} 
    {% for edition in card.editions %} 
     <td> {{edition.set }}</td> 
    {% endfor %} 
{% endfor %} 
+0

那么为什么multiverse_id仍然显示? – wuno

+0

@wuno - 如果它自从缺少结束标记,我会感到惊讶 – Sayse

+0

这是正确的我的应用程序是我的问题中的拼写错误。是的,它确实显示了我的信息。这就是我之前和之后所缺少的数据。我可以看到为什么有些显示和有些显示不需要将数据添加到数据中?我是否应该将版本附加到数据并以相同的方式访问它?数据卡中的data.append(editons)卡片.image_url – wuno