循环遍历Jinja2模板中的列表

时间:2012-11-12 19:22:13

标签: python html jinja2

我试图用Flask框架创建一个简单的博客网站。我博客中的每个条目都有标题,文字和评论。标题和文本存储在名为entries的表中,注释在名为comments的表中,该注释使用外键将注释链接到相应的条目。

我现在遇到的问题是我想在我的html文件中显示评论。要做的是我想在我的html文件中调用一个名为show_comments的python函数,而我正处于for循环中。 python函数如下所示:

@app.route('/comments/<entryid>')
def show_comments(entryid):
    db = get_db()
    curId = db.execute('select id, comment from comments where entry_id=entryid order by     id desc')
    comments = [dict(id=row[0], comment=row[1]) for row in curId.fetchall()]
    return render_template('show_entries.html', comments=comments)

我的模板如下所示:

% extends "layout.html" %}
{% block body %}
  {% if session.logged_in %}
    <form action="{{ url_for('add_entry') }}" method=post class=add-entry>
      <dl>
    <dt>Title:
    <dd><input type=text size=30 name=title>
    <dt>Text:
    <dd><textarea name=text rows=5 cols=40></textarea>  
    <dd><input type=submit value=Share>
  </dl>
</form>
  {% endif %}
  <ul class=entries>
  {% for entry in entries %}
    <li><h2>{{ entry.title }}</h2>{{ entry.text }}
{{ url_for('show_comments', entryid=entry.id) }}
<ul class=comments>
{% for acomment in comments %}
<li>{{ acomment.comment }}
</li>
</br>
</ul>
{% endfor %}
{% if session.logged_in %}
<form action="{{ url_for('add_comment', key=entry.id) }}" method=post class=add-entry>
<dl>
    <dt>Comment:
    <dd><textarea name=comment rows=2 cols=40></textarea>
    <dd><input type=submit value=Comment>
  </dl>
</form>
{% endif %}
  {% else %}
    <li><em>Unbelievable.  No entries here so far</em>
  {% endfor %}
  </ul>
{% endblock %}

1 个答案:

答案 0 :(得分:1)

你还没有真正告诉我们你的问题是什么,所以我不知道这是否会有所帮助。但我会在这里指出三个具体的错误:

首先,您将评论放在无序列表(<ul>标记)中,但是将结束标记(</ul>)放在循环中而不是在循环外。

</br>应该写成<br />,但实际上该标记不属于那里。

其次,您的HTML已损坏。 HTML属性(像type=submit这样的标记中的部分)应该在值周围加上引号。例如,它应该看起来像type="submit"。对于类似的事情,大多数浏览器都是宽容的,但最好不要依赖它并编写正确的HTML。