テーブルがあり、web2py アクションがそのすべてのコンテンツをビューに渡すようにしたいと考えています。次に、ビューはそこからサブセットを選択し、反復で一度に 1 つずつマニフェストします。
db.py のサンプル テーブルを次に示します。
db.define_table('block',
Field('location'),
Field('propertyA'),
Field('propertyB')
)
コントローラーの default.py のサンプル アクション:
def demo():
return dict(blocks=db(db.block).select())
ここまでは順調ですね。それはコンパイルされ、クラッシュせず、いくつかのテストを実行した後、私が望んでいたことを行いました.
しかし今、ビューのために。この例では、"propertyA" がたとえば 5 であるすべてを選択したいと思います。次に、それらを既に存在するテーブルに出力するループを実行します。テーブルには 100 個のセルがあり、ID は 1 ~ 100 です。プロパティ B の値を、ブロックの場所と一致する ID を持つテーブル セルに出力したいと考えています。
サンプル ビュー default/demo.html:
{{extend 'layout.html'}}
<style>
table#map, td {
border: 1px solid black;
border-collapse: collapse;
}
td {
background-color: gray;
width: 50px;
height:50px;
text-align: center;
color: white;
}
</style>
<!--This creates a 10*10 table with running id from 1 to 100-->
<table id="map">
<caption>Map</caption>
{{for y in range(10):}}
<tr>
{{for x in range(10):}}
{{=TD('', _id=10*y+x)}}
{{pass}}
</tr>
{{pass}}
</table>
<!--then I want to select a subset from blocks, whose propertyA is 5
These lines crash if uncommented.-->
{{#query = (propertyA == 5)}}
{{#subset = blocks(query).select()}}
<!--and run a loop which, which iterates the subset, and in each
iteration, writes the value of propertyB, if cell's id and block's location
match. I just made a place holder function, because I don't know how to
pass python variables/objects to javascript-->
<script>
//var subset = "subset from python";
function myFunction() {
var i;
for (i = 0; i < 100; i++) {
//var cell = document.getElementById(i);
//if(subset(location===cell.id).select() === True) {
//var value = subset(location===cell.id).propertyB;
//cell.innerHTML = value;
//} else {
//cell.innerHTML = '';
//}
}
}
</script>
したがって、これをどのように行うべきかわかりません。また、web2py のチュートリアル ブックは、これに関する情報が非常に少ないです。それとも、これに対して完全に間違ったアプローチをしていますか? ajax呼び出しでもできると思うので、データベースサーバーに100回続けてクエリを実行するのが正しいとは思えません。