Python 在Jinja2模板中的列表上循环

Python 在Jinja2模板中的列表上循环,python,html,jinja2,Python,Html,Jinja2,我试图用Flask框架创建一个简单的博客网站。我博客中的每个条目都有标题、文本和评论。标题和文本存储在名为entries的表中,注释存储在名为comments的表中,comments使用外键将注释链接到相应的条目 现在的问题是,我想在html文件中显示注释。要做的是,当我在for循环中时,我想在html文件中调用名为show_comments的python函数。python函数如下所示: @app.route('/comments/<entryid>') def show_comme

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

现在的问题是,我想在html文件中显示注释。要做的是,当我在for循环中时,我想在html文件中调用名为show_comments的python函数。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 %}
@app.route(“/comments/”)
def显示注释(entryid):
db=get_db()
curId=db.execute('select id,comment from comments其中entry\u id=entryid order by id desc')
comments=[dict(id=row[0],comment=row[1]),用于curId.fetchall()中的行
返回呈现模板('show\u entries.html',comments=comments)
我的模板如下所示:

@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 %}
%扩展了“layout.html”%}
{%block body%}
{%if session.logged_in%}
标题:
正文:
{%endif%}
    {entries%%中的条目的百分比}
  • {{entry.title}{{entry.text} {{url\u for('show\u comments',entryid=entry.id)}
      {%用于注释%中的注释}
    • {{acomment.comment}}

    {%endfor%} {%if session.logged_in%} 评论: {%endif%} {%else%}
  • 难以置信。到目前为止,这里没有参赛作品 {%endfor%}
{%endblock%}
您还没有真正告诉我们您的问题是什么,所以我不知道这是否有帮助。但我要指出三个具体错误:

第一种情况是,您将注释放在无序列表中(
标记),但您将结束标记(
)放在循环内部而不是外部


应该写

,但实际上,这个标签一开始就不属于那里


第二,你的HTML被破坏了。HTML属性(标签中的部分,如
type=submit
)的值周围应该有引号。例如,它应该看起来像
type=“submit”
。大多数浏览器在遇到这种情况时都会原谅我们,但最好不要指望它,而是编写正确的HTML。

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

第一种情况是,您将注释放在无序列表中(
标记),但您将结束标记(
)放在循环内部而不是外部


应该写

,但实际上,这个标签一开始就不属于那里


第二,你的HTML被破坏了。HTML属性(标签中的部分,如
type=submit
)的值周围应该有引号。例如,它应该看起来像
type=“submit”
。大多数浏览器在遇到这样的事情时都会原谅,但最好不要指望它,而是编写正确的HTML。

首先,这不是HTML。这是一个HTML模板。特别是它看起来像一个Jinja2模板。您没有在模板中调用任何Python函数,只是在注释列表上循环。虽然我可以告诉你,你的模板中有很多错误,但你还没有告诉我们你在这方面遇到了什么问题。我应该补充一点——你似乎对Flask(以及一般的web框架)的工作方式有误解。模板未调用show_comments函数。web框架调用它来生成对您的/comments/URL的HTTP请求的响应。然后,该函数将某些数据库查询的结果推送到一个列表中,在呈现模板时使用该列表。从某种意义上说,show_注释“调用”(实际上呈现)HTML模板,而不是相反。您已经向我们展示了您的尝试,这是值得称赞的。但问题到底是什么?首先,这不是HTML。这是一个HTML模板。特别是它看起来像一个Jinja2模板。您没有在模板中调用任何Python函数,只是在注释列表上循环。虽然我可以告诉你,你的模板中有很多错误,但你还没有告诉我们你在这方面遇到了什么问题。我应该补充一点——你似乎对Flask(以及一般的web框架)的工作方式有误解。模板未调用show_comments函数。web框架调用它来生成对您的/comments/URL的HTTP请求的响应。然后,该函数将某些数据库查询的结果推送到一个列表中,在呈现模板时使用该列表。从某种意义上说,show_注释“调用”(实际上呈现)HTML模板,而不是相反。您已经向我们展示了您的尝试,这是值得称赞的。但问题到底是什么?