1
我試圖用Flask框架製作一個簡單的博客網站。我的博客中的每個條目都有一個標題,文字和評論。標題和文本存儲在一個名爲條目的表中,並將註釋存儲在名爲comments的表中,該表將註釋與外鍵鏈接到相應的條目。循環播放Jinja2模板中的列表
我現在的問題是我想在我的html文件中顯示註釋。要做的是我想在我的for循環中調用一個名爲show_comments的python函數在我的html文件中。 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 %}
首先,這不是HTML。這是一個HTML模板。特別是它看起來像一個Jinja2模板。而且你沒有在模板中調用任何Python函數,你只是循環查看一系列註釋。你還沒有告訴我們你到底遇到了什麼問題,雖然我可以告訴你模板有很多錯誤。 – Iguananaut
我應該加上 - 你似乎對Flask(和一般的web框架)的工作方式有誤解。你的show_comments函數不被模板調用。它由web框架調用,以生成對您的/ comments/網址的HTTP請求的響應。該函數然後將某些數據庫查詢的結果推送到呈現模板時使用的列表中。在某種意義上,show_comments「調用」(實際上是渲染)HTML模板,而不是其他方式。 –
Iguananaut
你向我們展示了你所嘗試過的東西,這是值得讚揚的。但究竟是什麼問題? –