2016-02-18 59 views
0

我有一個Flask路徑,它使用boto3驗證並連接到AWS DynamoDB,並通過掃描來拉取整個表,並將結果作爲JSON返回。我想將結果呈現爲HTML,但將JSON傳遞到render_template不起作用,我得到500內部服務器錯誤。我如何呈現數據?從Jinja模板中的DynamoDB呈現數據

@app.route("/x/") 
def x(): 
    #Authentication and connection omitted 
    table = dynamodb.Table(table_name) 
    response = table.scan() 
    js = json.dump(response) 
    #return js 
    return render_template('test.html', data=js) 
<ul> 
{% for item in data %} 
    <li>{{ item.Make}}</li> 
    <li>{{ item.Model}}</li> 
    <li>{{ item.Year}}</li> 
{% endfor %} 
</ul> 

我要輸出的數據是這樣的:

Honda 
Civic 
2013 

Toyota 
Camry 
1999 

JSON數據:

{ 
    "Count": 2, 
    "Items": [ 
    { 
     "Make": "Honda", 
     "Model": "Civic", 
     "Year": "2013" 
    }, 
    { 
     "Make": "Toyota", 
     "Model": "Camry", 
     "Year": "1999" 
    } 
    ], 
    "ResponseMetadata": { 
    "HTTPStatusCode": 200, 
    "RequestId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
    }, 
    "ScannedCount": 2 
} 
+0

我編輯的問題,以增加更多的細節,你認爲這足以是一個正確的問題,或者我應該增加更多的細節? –

+0

如果你的回答是js,它是從字符串返回字典的加載(str)。否則,如果這是一個字典,你不必轉儲它,把它傳遞給視圖。 –

回答

1

如果你要呈現HTML數據,不要」將它轉儲爲JSON字符串。你擁有的數據是一本字典,迭代它在這種情況下是沒有意義的。你想迭代該字典中的值items

@app.route("/") 
def index(): 
    ... 
    response = table.scan() 
    return render_template('index.html', data=data) 
<table> 
<thead><tr><th>Make</th><th>Model></th><th>Year</th></tr></thead> 
<tbody>{% for item in data['items'] %}<tr> 
    <td>{% item['Make'] %}</td> 
    <td>{% item['Model'] %}</td> 
    <td>{% item['Year'] %}</td> 
</tr>{% endfor %}</tbody> 
</table> 
+0

非常感謝您的幫助,我對我爲AWS提供的實際數據以及您的模板和數據迭代真正澄清了我做錯了什麼感到困惑。當我達到足夠高的排名我的堆棧溢出帳戶,我會給你+ 1。再次感謝! –