Hi again,
I've changed the code to:
@expose(fragment = True)
def default(self, *args, **kwargs):
if len(args) != 2:
raise Exception("Invalid use of product controller - must
provide ID and action. You provided %d args: %s" % (len(args), str
(args)))
id, action = args
id = int(id)
product = Product.get(id)
if action == 'overview':
return dict(product = product, tg_template =
"doublesweb.templates.product_overview")
elif action == 'details':
return dict(product = product, tg_template =
"doublesweb.templates.product_details")
elif action == 'image':
response.headers['Content-type'] = "image/jpeg"
return product.image
raise Exception("Unknown action: %s for product ID: %d" %
(action, id))
which at least has the desired effect in this case.
It'd still be interesting to know if you could effect the expose
decorator used from within the controller if anyone has an idea how
that could work, 'twould be great :)))
Cheers,
C
On Nov 18, 3:25 pm, Matt Wilson <[EMAIL PROTECTED]> wrote:
> For returning the image, you might need to open a file pointer to the
> image and then read the bytes and then write them out.
>
> Just a wild guess.
>
> > Hopefully the solution to my other problem will be just as simple :)
>
> > Cheers,
> > C
>
> > On Nov 18, 3:14 pm, "[EMAIL PROTECTED]"
>
> > <[EMAIL PROTECTED]> wrote:
> > > Hi all,
>
> > > I'm writing a RESTful app and want to expose different aspects of an
> > > object using different methods depending on part of the URL:
>
> > > /product/1/overview
>
> > > should provide text/html from a kid template
>
> > > /product/1/image
>
> > > should provide image/jpg from binary data held as part of the model.
>
> > > I read somewhere (I think in the TurboGears book) that you can return
> > > tg_format as part of the result dictionary to do this, but its not
> > > working for me. Here's what I have:
>
> > > @expose(content_type = "image/jpg", as_format = "image")
> > > @expose(fragment = True)
> > > def default(self, *args, **kwargs):
> > > if len(args) != 2:
> > > raise Exception("Invalid use of product controller - must
> > > provide ID and action. You provided %d args: %s" % (len(args), str
> > > (args)))
> > > id, action = args
> > > id = int(id)
> > > product = Product.get(id)
> > > if action == 'overview':
> > > return dict(product = product, tg_template =
> > > "doublesweb.templates.product_overview")
> > > elif action == 'details':
> > > return dict(product = product, tg_template =
> > > "doublesweb.templates.product_details")
> > > elif action == 'image':
> > > response.body = product.image
> > > return dict(tg_format = "image")
> > > raise Exception("Unknown action: %s for product ID: %d" %
> > > (action, id))
>
> > > It returns the correct content_type when I add ?tg_format=image to the
> > > URL obtaining the image, but IMHO it would be more elegant to let the
> > > controller decide what kind of response it wants to give.
>
> > > The other problem I'm having is that I'm not actually getting the
> > > image data returned - but that's for another post (unless someone
> > > spots it and can provide me that info too :)).
>
> > > Thanks in advance for any help / hints / tips :D
>
> > > Cheers,
> > > C
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---