2014-01-28 26 views
1

不太確定如何循環這個,我認爲通過函數傳遞它可能是最好的,但我被告知要儘量不要這樣做,如果可能的話。Python:如何正確地循環jinja2中的這個編輯

這裏是我想要做的(front.py):

class Front(handler.Handler): 

    def get(self): 
     query = b1data.b2data.all() 

     # Here is what I'm trying to print for each entry 
     for a2 in query: 
      # the dates are: 2013-10-05 03:00:00 and 2014-01-07 03:00:00 
      b = datetime.strptime(a2.date_airingdate, '%Y-%m-%d %H:%M:%S') 
      a = datetime.now() 
      totaldays = (a-b).days 
      allweeks = totaldays/7 + 1 

     self.render("front.html", allweeks=allweeks, query=query) 

這裏是我的front.html

{% for a2 in query %} 
<tr class="header"> 
    <td>{{ a2.somename }}</td> 
    <td>{{ allweeks }}</td> 
    </tr> 
{% endfor %} 

這只是打印了(第1)項,我怎樣才能得到這個每個條目。

回答

1

我會離開我的所有邏輯的處理程序中,構造一個字典的列表,並把它傳遞到模板:

class Front(handler.Handler): 
    def get(self): 
     data = [] 
     now = datetime.now() 
     for item in b1data.b2data.all(): 
      airingdate = datetime.strptime(item.date_airingdate, 
              '%Y-%m-%d %H:%M:%S') 
      data.append({'allweeks': (now - airingdate).days/7 + 1, 
         'somename': item.somename}) 

     self.render("front.html", data=data) 

然後,顯示在模板中的數據是相當直接:

{% for item in data %} 
    <tr class="header"> 
     <td>{{ item.somename }}</td> 
     <td>{{ item.allweeks }}</td> 
    </tr> 
{% endfor %} 

此外,請注意,您應該儘可能減少循環中的東西。例如,爲什麼在循環中調用datetime.now()--而是在循環之前調用它並重用。

希望有所幫助。

+0

採取了一點讓它與我的其他代碼一起工作(在我的一端是一團糟),但它效果很好!將這種方式用於很多事情,謝謝! – user1043816