我正在尝试从web2py中的视图查询数据库表,因为我需要从另一个表中为当前表中的每一行取一个字段,所以我编写了这样的代码:
{{for recipe in rows:}}
<div class="well">
<table>
<tr>
<td>
<div style="text-align:center">
<img width="200px"
src="{{=URL('download', args=db(db.uploads.recipe_id==recipe.id).select().first().up_file)}}" />
</div>
</td>
<td><button>
-
</button></td><td><span class='votes'>{{=recipe.votes}}</span></td><td><button>
+
</button><td><strong>{{=A("comments",_href=URL('view_posts',args=recipe.id))}},{{=recipe.name}}</strong></td></td></tr>
</table>
</div>
{{pass}}
但我怀疑我们是否可以从视图中查询数据库? 如果不是,我如何从控制器查询相同的内容并将其返回到视图? 这可能是一个愚蠢的怀疑,但对不起,我是web2py的新手
答案 0 :(得分:1)
你可以这样做,但效率不高,因为你将对表中的每一行都有一个单独的查询。相反,您在控制器中创建rows
对象的查询应该涉及与db.uploads
表的连接:
rows = db((your_current_query) & (db.uploads.recipe == db.recipe.id)).select()
然后在视图中:
{{for row in rows:}}
<div class="well">
<table>
<tr>
<td>
<div style="text-align:center">
<img width="200px"
src="{{=URL('download', args=row.uploads.up_file)}}" />
</div>
</td>
<td><button>
-
</button></td><td><span class='votes'>{{=row.recipe.votes}}</span></td><td><button>
+
</button><td><strong>{{=A("comments",_href=URL('view_posts',args=row.recipe.id))}},{{=row.recipe.name}}</strong></td></td></tr>
</table>
</div>
{{pass}}
注意,因为rows
对象现在表示两个表之间的连接,所以必须同时使用表名和字段名来访问给定值(例如row.recipe.name
而不是{{1 }})。为清楚起见,我在row.name
循环中将for
更改为recipe
。