запрос базы данных из представления web2py

Я пытаюсь запросить таблицу базы данных из представления в 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


person radha    schedule 21.03.2016    source источник


Ответы (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, а не row.name). Чтобы было понятно, в цикле for я заменил recipe на row.

person Anthony    schedule 21.03.2016