【问题标题】:Need help accessing Python dictionary value in Jinja using Flask application需要帮助使用 Flask 应用程序访问 Jinja 中的 Python 字典值
【发布时间】:2021-07-02 21:07:24
【问题描述】:

这是我的 Flask Python 应用程序。

@app.route("/")
@login_required
def index():
    """Show portfolio of stocks"""

    holdings = db.execute("SELECT symbol,SUM(shares),price FROM purchases GROUP BY symbol HAVING id = ?",session["user_id"])

    return render_template("index.html",holdings=holdings)

这是我的 HTML 索引文件

{% extends "layout.html" %}

{% block title %}
    Log In
{% endblock %}

{% block main %}
<table class="table table-striped">
        <thead>
            <tr>
                <th>Symbol</th>
                <th>Name</th>
                <th>Shares</th>
                <th>Price</th>
                <th>TOTAL</th>
            </tr>
        </thead>
        <tbody>
            {% for trade in holdings %}
                <tr>
                    <td>{{trade.symbol}}</td>
                    <td>{{trade.SUM(shares)}}</td>
                    <td>{{trade}}</td>
                    <td>{{trade.price}}</td>
                    <td>$278.94</td>
                </tr>
            {% endfor %}
            <tr>
                <td colspan="4">CASH</td>
                <td>$9,589.93</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td colspan="4"></td>
                <td>{{total}}</td>
            </tr>
        </tfoot>
    </table>
{% endblock %}

holding 以字典格式返回行列表,如下所示:{'symbol': 'aapl', 'SUM(shares)': 1038, 'price': 137.27}。这是针对每一行的。

问题


第一季度

当我尝试访问第二个字典键 SUM(shares) 时,它不起作用并弹出错误

(&lt;td&gt;{{trade.SUM(shares)}}&lt;/td&gt; jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'SUM')

当我尝试引用 SUM(shares) 时,会弹出此消息

&lt;td&gt;{{trade.'SUM(shares)'}}&lt;/td&gt; jinja2.exceptions.TemplateSyntaxError: expected name or number

我正在使用 CS50 IDE。

为什么会这样?我该如何解决这个问题?


第二季度

为了访问字典值,我没有像在 Python 中那样使用dictionary["key"],而是在 Jinja 中使用了dictionary.key。这是普通的 Jinja 还是课程中经过特殊修改的 Jinja?

【问题讨论】:

    标签: sql flask jinja2 cs50


    【解决方案1】:

    编辑:由于键值SUM(shares) 包含可以以多种方式解释的字符,您需要切换到your_dict['your_key'] 访问语法而不是“点”访问语法:

                {% for trade in holdings %}
                    <tr>
                        <td>{{ trade["symbol"] }}</td>
                        <td>{{ trade["SUM(shares)"] }}</td>
                        <td>{{ trade["price"] }}</td>
                    </tr>
    

    【讨论】:

    • 等一下,trade.symbol 会做什么?点是干什么用的?
    • 实际上他们在 Jinja 中做的事情大致相同(参考:jinja.palletsprojects.com/en/3.0.x/templates/#variables),但存在您的SUM(shares) 密钥与“点”语法不兼容的问题。所以,你可以在这里使用其他语法。
    • 感谢兄弟的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多