Python 在Jinja2模板中的列表上循环
我试图用Flask框架创建一个简单的博客网站。我博客中的每个条目都有标题、文本和评论。标题和文本存储在名为entries的表中,注释存储在名为comments的表中,comments使用外键将注释链接到相应的条目 现在的问题是,我想在html文件中显示注释。要做的是,当我在for循环中时,我想在html文件中调用名为show_comments的python函数。python函数如下所示: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
@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模板,而不是相反。您已经向我们展示了您的尝试,这是值得称赞的。但问题到底是什么?