在 Jinja 模板中呈现来自 DynamoDB 的数据

Render data from DynamoDB in Jinja template

我有一个 Flask 路由,它使用 boto3 验证并连接到 AWS DynamoDB,并通过扫描提取整个 table,将结果返回为 JSON。我想将结果呈现为 HTML,但是将 JSON 传递给 render_template 不起作用,我收到 500 内部服务器错误。如何呈现数据?

@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
}

如果您要在 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>