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

时间:2017-02-26 19:21:59

标签: 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 -->

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

1 个答案:

答案 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)