2017-02-26 4 views
0

Ich habe einen benutzerdefinierten Filter in Jinja, die zwei Argumente erfordert, ich rufe die Funktion in meiner Jinja Vorlage und ich bekomme einen TypeError über Positionsargumente. Dass meine Funktion zwei (richtig) nimmt aber das 3 wurden (falsche) gegebenJinja2 benutzerdefinierte Funktion geben Positionsargument Fehler

Hier ist der Funktionscode

# 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 

Dies ist, wie sie eingetragen ist ..

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

Dies ist, wie Ich versuche es zu nennen.

{% 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 --> 

Was fehlt mir hier? Ich kann die Funktion ohne Problem ausführen, wenn ich es nur aus der Datei ausführen, aber nicht beim Laden der Vorlage.

Antwort

0

Ich fand es heraus .. Filter in Jinja2 können nur ein Argument nehmen. Ich brauchte einen context_processor, der eine beliebige Anzahl von Argumenten annehmen kann

Das war der Code, den ich verwendet habe, um es zu beheben;

@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) 
+0

Dieses es fixiert hätte, '

  • Balance: {{row.inst_id | get_balance (row.stud_id)}}
  • ' – franklinsijo

    Verwandte Themen