【发布时间】:2021-04-04 18:42:09
【问题描述】:
遍历 pandas 数据框会得到一个 HTML 表格。 除了简单地显示数据框的第一列之外,我还希望它通过标签成为 app.route('account') 的链接。
<table>
{% for row in df.itertuples() %}
<tr>
<td><a href="{{ url_for('account',table_name='{{ row[1] }}') }}">{{ row[1] }}</a></td>
<td>{{ row[2] }}</td>
<td>{{ row[3] }}</td>
</tr>
{% endfor %}
</table>
使用table_name=‘{{ row[1] }} 不起作用。 HTML 输出中显示的文本是 table_name 变量的正确字符串。 (即“Bank_Account”、“Offerings”等)。但是使用’{{ row[1] }}’ 会得到类似%7B%7B%20row%5B1%5D%20%7D%7D 而不是Bank_Account。
我尝试过使用{{ row[1]|safe }}
使用字符串作为文本,Bank_Account(例如),确实适用于银行帐户行,即这样有效:
<td><a href="{{ url_for('account',table_name='Bank_Account') }}">{{ row[1] }}</a></td>
MySQL 语法错误,我认为这是由于 jinjas 使用错误来获取row[1]:
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{ row[1] }} ORDER BY Date' at line 1
app.routes
@app.route('/')
def trial_balance():
data = {
'Account': table_list,
'Balance': Balance,
}
...
df = pandas.DataFrame (data, columns = ['Account','Balance'])
df['Dr'] = ''
df['Cr'] = ''
...
return render_template('trial_balance.html',df=df,database=database)
@app.route('/account/<string:table_name>')
def account(table_name):
...
df = pandas.read_sql_query("SELECT * FROM "+table_name+" ORDER BY Date;", con=mydb)
account = df.to_html(index=False)
...
return render_template('individual_account.html',account=account,account_name=table_name)
【问题讨论】:
标签: python pandas flask jinja2