我有一個表,並希望web2py操作傳遞其視圖的所有內容。該視圖然後從中選擇一個子集並在迭代中一次一個地顯示它們。Web2py數據庫:如何從選定行中選擇行的子集?我如何將它傳遞給JavaScript?
下面是一個示例表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。我想將propertyB的值打印到表格單元格,其ID與塊的位置相匹配。
樣本視圖默認/ 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次是正確的。
您是否需要爲propertyA的多個值或只是一個值執行此操作?如果是後者,爲什麼你需要將所有記錄發送到視圖?如果前者,爲什麼不只是返回與propertyA的不同值相匹配的記錄的聯合,並將它們全部插入到表中一次傳遞? – Anthony
我需要多個值。每一行都有不同的值,所以人們不會這樣做。事實上,爲什麼我需要返回整個數據表,並且無法一次將數據插入到html表中,這是因爲我的按鈕在表上顯示不同的數據。 myFunction是按鈕調用的一個函數的示例。 – DiMarzio