Victor Subervi wrote: > On Wed, Apr 9, 2008 at 10:24 AM, Steve Holden <[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>> wrote: > > Victor Subervi wrote: > > On Wed, Apr 9, 2008 at 1:14 AM, Gabriel Genellina > > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>> wrote: > > > > Now all you have to do is what I told you in the first place, which is > to remove the print statements before and after "print content". > > > That is what I figured after I sent the email. However, I had tried that > with a test script and the working script, with bad results. Here is the > test script that should have worked flawlessly: > > #! /usr/bin/python > > import MySQLdb > > print "Content-type: image/jpeg\r\n" > host = 'host' > db = 'bre' > user = 'user' > passwd = 'pass' > connection = MySQLdb.connect(host=host, user=user, passwd=passwd, db=db) > cursor = connection.cursor() > cursor.execute('select img from photo where id="7";') > content = cursor.fetchall()
Bzzt! Nope. Cursor.fetchall() returns a list (length 1) or tuples (length 1) here, so this should be content = cursor.fetchall()[0][0] or, perhaps better content = cursor.fetchone()[0] > print "Content-Type: image/jpeg\nContent-Length: %d\n" % len(content) > print content > connection.commit() The line above is completely unnecessary if the database has not been changed. > connection.close() > > This prints out the URL as an image! No idea why. But it does not > produce the desired image. > I've no idea why either, but try fixing the script and see what that does. > The following is the heart of the script for display. I tried entering > the Content-type where indicated, but it produces everything up to the > image, then produces the result of code from the exception... > > cursor.execute('select id from products where category="' + category > + '" order by sort_factor desc, price desc;') > ids = cursor.fetchall() > if len(ids[0]) != 0: > for id in ids: > for d in id: > print '<tr>\n' > cursor.execute('select * from products where id = ' + str(d) + > ';') > col_fields = cursor.fetchall() > if lang == 'es': > print '<b>ID: </b>', col_fields[0][0], '<br />' > print '<b>Nombre: </b>', col_fields[0][2], '<br />' > print '<b>Título: </b>', col_fields[0][6], '<br />' > print '<b>Descripción: </b>', col_fields[0][9], '<br />' > print '<b>Precio: </b>', col_fields[0][11], '<br />' > print '<b>Recámaras: </b>', col_fields[0][12], '<br />' > print '<b>Baños: </b>', col_fields[0][13], '<br />' > content = col_fields[0][14].tostring() > print "Content-Type: image/jpeg\nContent-Length: %d\n" % > len(content) > print content, '<br /><br />' You really don't understand how the web works, do you? In order to include an image in a page your browser must make TWO requests. The first is for an HTML page that will reference the image in this way: <img src="http://your URL here"> Seeing this img tag causes the browser to make a SECOND request, which the script I corrected above should respond to with an image. The bytestream is critical in the image response. Even one misplaced byte will mess things up terribly. > ... > except: > if lang == 'es': > print 'Lo siento. Todavía no tenemos propiedades para enseñarse en > la categoría de ', category, '.\n<br /><br />' > > > > You are NOT generating HTML, you are generating a JPEG image. > > > I am producing both, and this is causing me confusion. Read an explanation of HTML and images if my brief treatise above was insufficient. > BTW, when we are finally done with this, I will write a nice how-to > (since there is not one in python, while php has some nice ones) on how > to do this, and give you and Gabrielle all your due credit. I will post > it to this list, because that is sure to rank highly in google right away. > Victor > That's great, though hardly the point of the exercise. I think Google already know about Gabriel (*not* Gabrielle) and me already ... regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list