Python 在Jinja2模板中迭代字典列表

Python 在Jinja2模板中迭代字典列表,python,flask,jinja2,Python,Flask,Jinja2,我试图循环浏览字典列表,使用键的值作为jinja模板中的HTML属性。但是模板不会呈现任何数据。当我将数据传递到routes文件中的render_template函数时,我已经验证了数据是否正确 我已经问了很多StackOverflow的问题,特别是,但都没有用 以下是我的数据结构: [ { 'name': 'chicken pie', 'image': 'chicken.jpg', 'url': 'chicken.html' }, { 'name':

我试图循环浏览字典列表,使用键的值作为jinja模板中的HTML属性。但是模板不会呈现任何数据。当我将数据传递到routes文件中的render_template函数时,我已经验证了数据是否正确

我已经问了很多StackOverflow的问题,特别是,但都没有用

以下是我的数据结构:

[
  {
    'name': 'chicken pie',
    'image': 'chicken.jpg',
    'url': 'chicken.html'
  },
  {
    'name': 'chicken sandwich',
    'image': 'sandwich.jpg',
    'url': 'sandwich.html'
  }
]
我的模板是:

<div class="page-header">
  <h1>Recipes Matching {{ query }}</h1>
  {% for dict_item in names %}
    <div>
      <img src="{{ dict_item['image'] }}" height="100" width="100">
      <a href="{{ dict_item['url'] }}">{{ dict_item['name'] }}</a>
    </div>
  {% endfor %}
</div>

配方匹配{{query}
{names%%中dict_项的百分比}
{%endfor%}

使用字典键作为属性,将结构转换为类对象列表要容易得多:

class Item:
  def __init__(self, vals):
    self.__dict__ = vals

@app.route('/yourroute')
def your_route():   
  data = [{'name': 'chicken pie', 'image': 'chicken.jpg', 'url': 'chicken.html'}, {'name': 'chicken sandwich', 'image': 'sandwich.jpg', 'url': 'sandwich.html'}]
  return flask.render_template('your_template.html', names = [Item(i) for i in data])
最后,在
您的_template.html
中:

<div class="page-header">
<h1>Recipes Matching {{ query }}</h1>
{% for dict_item in names %}
  <div>
    <img src="{{dict_item.image}}" height="100" width="100">
    <a href="{{dict_item.url}}">{{dict_item.name}}</a>
  </div>
{% endfor %}
</div>

配方匹配{{query}
{names%%中dict_项的百分比}
{%endfor%}

什么是回溯?请尝试键的句点限定符,而不是括号。@Parfait-感谢您的建议。尝试了dict_item.image等,但结果相同-未呈现任何数据。谢谢@Ajax1234-效果非常好。最后一个问题——我真的不明白为什么会这样,所以你能给我指一些进一步的阅读/谷歌搜索,让我能更好地理解吗?再次感谢@user22927很高兴为您提供帮助!
\uuuu init\uuuu
方法利用内置属性从传递给它的字典键轻松创建属性
[数据中i的项(i)
是一个,并使用
对象创建一个新列表。请让我知道,如果这有助于你和链接回答你更大的问题。