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]

Reply via email to