【问题标题】:Flask/jinjas - url_for - from pandas iterated data (itertuples)Flask/jinja - url_for - 来自 pandas 迭代数据 (itertuples)
【发布时间】: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


    【解决方案1】:

    你能试试下面的代码吗?

    <td><a href="{{ url_for('account',table_name=row[1]) }}">{{ row[1] }}</a></td>
    

    我的理解是当“解析器”检测到大括号时,它会进入“python-execution”模式。所以对于{{ url_for('account',table_name=row[1]) }},变量row应该已经可以访问了,我们应该将大括号中的部分视为普通的python代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 2021-12-25
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多