2015-10-09 36 views
0

目標:{% for loop %}在列表(使用Jinja2),然後在使用引導一個HTML表打印出來的結果{{print}}
問題:列表不打印在模板中。
For循環從數據庫中使用Jinja2的模板

view_config,我以前query.all()返回所有assessment_results對象的列表。他們正在返回......我通過終端/打印調試確認了這一點。但是,for loop未返回填充表所需的值;作爲read in Jinja2 tutorial。我不認爲我需要在view_config中使用for loop,因爲我已經看到其他人做了(see here),但我對此並不熟悉,並且試圖弄清楚這兩個程序(SQLALCHEMYJinja2)是如何相互作用的。

使用上述.all()之後從打印輸出的一個例子:

[<Assessment_Result(owner='<User(username ='baseball', firstname ='Jen', lastname ='See', email='[email protected]')>', assessment='<Assessment(name='Becoming a Leader', text='better decisions')>')>] 

view_config代碼:
views.py

@view_config(route_name='assessment_results', request_method='GET', renderer='templates/assessment_results.jinja2') 
def all_assessment_results(request): 
    with transaction.manager: # < --- THIS WAS THE ISSUE ! 
     assessment_results = api.retrieve_assessment_results() 
     if not assessment_results: 
      raise HTTPNotFound() 
     return {'assessment_results': assessment_results} 

使用自舉通訊Jinja2的模板:
assessment_results.jinja2

<div class="container"> 
    <table class="table table-hover"> 
     <thead> 
      <tr> 
       <td> Assessment ID </td> 
       <td> Assessment </td> 
       <td> Owner </td> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 
       {% for x in assessment_results %} 
       <td>{{ x.assessments|e }}</td> 
       <td>{{ x.owners|e}}</td> 
       {% else %} 
       <td><em>no users found</em></td> 
       {% endfor %} 
      </tr> 
     </tbody> 
     </table> 
    </div> 

回答

1

你應該看看文檔

http://jinja.pocoo.org/docs/dev/templates/#for

你要遍歷一個dict,所以請考慮使用iteritemsitervalues或者你什麼都想要。

另請注意,您的查詢不會返回dict,它將返回list或匹配的行。

我也不確定for-else是否在忍者裏工作。但是你應該避免使用它。

+0

是的,我有一個列表正在返回。我嘗試了'{%for key,value in assessment_results.iteritems%}',但這似乎也不起作用。我擺脫了'for-else' – thesayhey

+0

你會建議使用什麼,因爲它是一個'list',我試圖'循環'所有結果並將它們打印到模板上。 'for-else'確實在忍者裏工作,但我沒有使用它。 – thesayhey

+0

您確定'assessment_results'包含列表中的所有對象嗎?如果你想看到值被傳遞到那裏,你可以在Jinja中使用[pprint filter](http://jinja.pocoo.org/docs/dev/templates/#pprint)。請注意''list'沒有'iteritems',你應該使用'value for values' – adarsh