Actually you dont need even an ajax callback.
Take this example:
## models/script.py ##
db.define_table("mytable", Field("picture", "upload"))
print "models executed!"
## controllers/default.py ##
def index():
pictures = db(db.mytable).select()
return dict(pictures=pictures)
def download():
return response.download(request, db)
## views/default/index.html ##
{{for picture in pictures:}}
<img src="{{=URL('default', 'download', args=picture.picture)}}">
{{pass}}
Let's say the table has 200 records and I want to show 200 thumbnails in
the page.
Q: How many times you will see "models executed!" in terminal? and how many
times the table will be defined? the Auth, Crud, Service etc will be
instantiated?
A: 201 times. 1 for the first request and 200 for each image which calls
the 'download' function.
Now imagine a system which huge model files, too many tables and calling
long running funtions.
my tips:
1. Avoid models, use modules and import what you need in controller.
2. Avoid the download function, put uploadfolder='static' and build
URL('static') when need an image. Or put your download function in a
separate application which have access to the file system and database.
--
Bruno Rocha
[http://rochacbruno.com.br]