我在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 -->
我在这里缺少什么?如果我只是从文件中运行它,我可以运行该函数,但不能在加载模板时运行。
答案 0 :(得分:0)
我想通了.. 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)