gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:31 35 4
gpt4 key购买 nike

我在 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com