2012-11-12 76 views
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 %} 
+0

首先,這不是HTML。這是一個HTML模板。特別是它看起來像一個Jinja2模板。而且你沒有在模板中調用任何Python函數,你只是循環查看一系列註釋。你還沒有告訴我們你到底遇到了什麼問題,雖然我可以告訴你模板有很多錯誤。 – Iguananaut

+0

我應該加上 - 你似乎對Flask(和一般的web框架)的工作方式有誤解。你的show_comments函數不被模板調用。它由web框架調用,以生成對您的/ comments/網址的HTTP請求的響應。該函數然後將某些數據庫查詢的結果推送到呈現模板時使用的列表中。在某種意義上,show_comments「調用」(實際上是渲染)HTML模板,而不是其他方式。 – Iguananaut

+0

你向我們展示了你所嘗試過的東西,這是值得讚揚的。但究竟是什麼問題? –

回答

1

你還沒有真正告訴我們您的問題,所以我不知道這是否會幫助什麼。但我會在這裏指出三個具體的錯誤:

首先是您將您的註釋放在無序列表中(<ul>標籤),但是您將結束標籤(</ul>)放在循環內部而不是在其外部。

</br>應該寫成<br />,但實際上該標籤並不屬於那裏。

其次,您的HTML已損壞。 HTML屬性(標籤中的部分,如type=submit)應該在值周圍加引號。例如,它應該看起來像type="submit"。當涉及到這樣的事情時,大多數瀏覽器都是寬容的,但最好不要指望它並編寫正確的HTML。