2017-11-20 2 views
1

私はMySQLデータベースで動作するFlaskアプリケーションを設計しています。Flask - ネストされたfor-loopsを介してハイパーリンクのHTMLテーブルを作成していますか?

私は下のこのフラスココードがあります。

@app.route("/test") 
def test(): 
cursor.execute("SELECT * from testtable;") 
data = cursor.fetchall() 
return render_template('test.html', data = data) 

を私は、このデータからHTMLテーブルをしたい、と私は、この表の最初の列がハイパーリンクになりたいです。私の現在のtest.htmlは以下の通りです:

<table border="1" cellpadding="5" cellspacing="5"> 
{% for row in data %} 
<tr> 
{% for d in row %} 
    <td><a href="/testresult?query={{ d }}">{{ d }}</a></td> 
{% endfor %} 
</tr> 
{% endfor %} 
</table> 

このHTMLは、表の各列のすべてのセルからハイパーリンクを作り出します。最初の列のセルのみをハイパーリンクにする方法はありますか?他のセルはすべて{{d}}にしてください。

答えて

1

Flaskのデフォルトテンプレートエンジンはjinja2です。

jinja2では、ループインデックスを確認できます。これは、次のようなことができることを意味します。

{% for d in row %} 
    {% if loop.index == 1 %} # You can also use loop.index0 for 0-based indexing 
    <td><a href="/testresult?query={{ d }}">{{ d }}</a></td> 
    {% else %} 
    <td>{{ d }}</td> 
    {% endif %} 
{% endfor %} 

また、次の構文を使用して、行のリストの最初の要素をスキップすることができます:tr要素の外側のforループのために入れて、あなたのテーブルでは

{% for d in row[1:] %} 
+1

ありがとう!しかし、2行目では、ループが1-indexedであるので、 {%if loop.index == 1%} となるはずです。 – Noel

+0

はい、loop.index(1インデックス)とループのようです。 index0(0の添字付き)が利用可能です。私は私の答えを編集します。 – Astralis

0

を。

<table border="1" cellpadding="5" cellspacing="5"> 
{% for row in data %} 
<tr> 
    <td><a href="/testresult?query={{ row.d }}">{{ row.d }}</a></td> 
{% endfor %} 
</tr> 
</table> 
関連する問題