У меня есть таблица и хочу, чтобы действие 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 ячеек, а идентификаторы - 1-100. Я хочу напечатать значения свойстваB в ячейках таблицы, чей идентификатор соответствует местоположению блоков.
Вид выборки по умолчанию/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 или только одного значения? Если последнее, зачем вам нужно отправлять все записи в представление? Если первое, почему бы просто не вернуть объединение записей, которые соответствуют различным значениям свойства А и вставить их все в таблицу за один проход? – Anthony
Мне нужно несколько значений. Каждая строка имеет разные значения, поэтому ее не было бы. И тот факт, почему мне нужно вернуть всю таблицу данных и не может сразу вставить данные в таблицу html, потому что у меня есть кнопки, которые показывают разные данные в таблице. myFunction - это пример одной функции, вызываемой кнопкой. – DiMarzio