Nem todo código Python que utilizarmos na view será definido nela mesma. Às vezes, precisaremos recuperar informações do banco de dados e fazer operações mais complexas e de forma mais segura e, por isso, iremos realizar essas tarefas nas nossas funções do controller.
default.py
def gatinhos():
gatos = db(db.gatos.id>0).select()
return dict(gatos=gatos)
Nesse caso, queremos que a view receba o resultado da nossa consulta ao banco de dados. Por isso, ao fazer um return enviamos um dicionário. Esse dicionário enviará para a view todos os valores que queremos utilizar nela. Portanto, agora posso chamar a variável gatos na view da minha página e ela conterá todo o select que acabei de fazer.
views/default/gatinhos.html
<html>
<body>
{{for gato in gatos:}}
Nome: {{=gato.nome}} </br>
Raça: {{=gato.raca}}
<hr />
{{pass}}
</body>
</html>