python - Jinja2 自定义函数给出位置参数错误

标签 python flask jinja2

我在 Jinja 中有一个自定义过滤器,需要两个参数,我在 Jinja 模板中调用该函数,并且收到有关位置参数的 TypeError。我的函数需要两个(正确),但给出了 3 个(不正确)

这是函数代码

# Get the total balance of a student to display for an instructor
def get_stud_balance(inst_id, stud_id):
    balance = 0
    stud_balance = Packages.query.filter(Packages.inst_id == inst_id, Packages.stud_id == stud_id).all()
    for row in stud_balance:
        balance += row.balance
    return balance

这就是它的注册方式..

app.jinja_env.filters['get_balance'] = filters.get_stud_balance

这就是我试图调用它的方式..

{% for row in studs %} <!-- START for loop -->
                <div class="col-md-4">
                    <div class="panel panel-default">
                        <div class="panel-heading"><center>{{ row.first_name }} {{ row.last_name }}</center></div>
                        <div class="panel-body">
                            <li>Cell Phone: {{ row.cell|phone }}</li>
                            <li>Home Phone: {{ row.home|phone }}</li>
                            <li>Email: {{ row.email }} </li>
                            <li>Birthday: {{ row.birthday|date }}</li>
                            <li>Gender: {{ row.gender|gender }}</li>
                            <li>Balance: {{ balance|get_balance(row.inst_id, row.stud_id) }}</li>
                        </div>
                    </div>
                </div>
                {% endfor %} <!-- /END for loop -->

我在这里缺少什么?如果我只是从文件中运行该函数,则可以毫无问题地运行该函数,但在加载模板时则不行。

最佳答案

我想通了.. Jinja2 中的过滤器只能接受一个参数。我需要使用可以接受任意数量参数的 context_processor

这是我用来修复它的代码;

@app.context_processor
def utility_processor():
    def get_stud_balance(inst_id, stud_id):
        inst_id = int(inst_id)
        stud_id = int(stud_id)
        balance = 0
        stud_balance = Packages.query.filter(Packages.inst_id == inst_id, Packages.stud_id == stud_id).all()
        if stud_balance:
            for row in stud_balance:
                balance += row.balance
            return balance
        else:
            return None
    return dict(get_stud_balance=get_stud_balance)

关于python - Jinja2 自定义函数给出位置参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473058/

相关文章:

python - 是否可以在不替换变量的情况下加载 jinja2 模板?

python - 在Google App Engine中,如何使用python通过 bool 值进行查询?

python - 使用 Python 读取 RTF 文件时出现欧元符号问题

python - 将 json 字符串插入表中

python - 如何在我的页面上嵌入 Flask-Security 登录表单?

python - 编辑 django 表单小部件渲染

python - 无效的 block 标记 'else'。您是否忘记注册或加载此标签?

python - 为什么在python中计算CRC16会有差异?

python - Pandas Dataframe 索引问题

python - 无法理解 Python 的 'truncate' 和 'write'