My apologies; I was using tg2 2.1.1, and the code seems to have changed to pass a dictionary in 2.1.4.
For those finding this thread after me via google, the solution I ended up going with is using xhtml.wsgi.PisaMiddleware (sample usage in https://github.com/chrisglass/xhtml2pdf/tree/master/demo/wsgi ) Thanks for your response, Alessandro On Wed, May 23, 2012 at 4:11 PM, Alessandro Molina < [email protected]> wrote: > Actually after_render hook permits to modify the rendered page. > > It gets as parameter a dictionary where the key "response" is the > response getting out from that request. > Replacing the content of that key replaces the response sent by TurboGears. > > On Tue, May 22, 2012 at 8:56 PM, Matthew Boehm <[email protected]> > wrote: > > I am trying to implement a PDF converter as well, but have run into some > > problems: > > > > * after_render hooked functions only receive a literal with the rendered > > result. Modifying this result/returning the modified version in the > hooked > > function does not change what is written to the response object. > > * If you try writing directly to the response object, sometime after your > > function returns, the entire original response is written to the response > > object. > > > > Is there a way to modify the response's content and headers in a function > > hooked to after_render? > > > > On Monday, September 19, 2011 10:38:32 AM UTC-4, Alessandro Molina wrote: > >> > >> you can use > >> > Decoration.get_decoration(controller_method).register_hook('after_render', > >> callable) > >> and callable will be execute after rendering the template with the > >> rendering result as parameter. > >> > >> On Mon, Sep 19, 2011 at 3:32 PM, León Domingo <[email protected]> > >> wrote: > >> > Hi Alessandro, > >> > And how would it be this way? I don't know exactly how "after_render" > >> > has to be used. As far as I know, you define a function with a > >> > "response" parameter and then a decorator "after_render" passing that > >> > function in. > >> > > >> > def _after_render(r): > >> > # something to be done > >> > r.content_type = 'application/pdf' > >> > r.body = to_pdf(r.body) > >> > > >> > @expose('foo.html') > >> > @after_render(_after_render) > >> > def foo(self, *args, **kwargs): > >> > return dict(....) > >> > > >> > is it correct? I was trying this way but...can I modify "response" > >> > inside "_after_render"? I thought it was not possible... > >> > > >> > Thanks > >> > > >> > León > >> > > >> > On 19 sep, 15:13, Alessandro Molina <[email protected]> > >> > wrote: > >> >> Uhm, I would suggest you to setup a after_render hook and decide if > >> >> the render result must be converted to a PDF or not. > >> >> In the case it doesn't have to be converted you can leave it go as > >> >> HTML, otherwise you can call wkhtmltopdf > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> On Sun, Sep 18, 2011 at 9:54 AM, León Domingo <[email protected] > > > >> >> wrote: > >> >> > Hi, > >> >> > I've created a little function that makes use of wkhtmltopdf > (http:// > >> >> > code.google.com/p/wkhtmltopdf/) to get PDF content from HTML > content. > >> >> > >> >> > I would like to use some controllers to get a PDF version of the > HTML > >> >> > content defined in the corresponding template. > >> >> > >> >> > @expose('foo.html') > >> >> > def foo(self, *args, **kwargs): > >> >> > return dict(....) > >> >> > >> >> > I've been making some experiments with a middleware class. > >> >> > >> >> > response.content_type = 'application/pdf' > >> >> > response.body = to_pdf(response.body) > >> >> > >> >> > return response(environ, start_response) > >> >> > >> >> > It works but I need something to know if I have to make the > >> >> > translation or not > >> >> > >> >> > if is_a_suitable_response: > >> >> > response.content_type = 'application/pdf' > >> >> > response.body = to_pdf(response.body) > >> >> > >> >> > return response(environ, start_response) > >> >> > >> >> > and I don't know how I can "mark" the response to do so. In the > other > >> >> > hand, I don't know if this is the right way to do that. > >> >> > >> >> > Thanks a lot > >> >> > >> >> > León > >> >> > >> >> > -- > >> >> > 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 > >> >> > athttp://groups.google.com/group/turbogears?hl=en. > >> > > >> > -- > >> > 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. > >> > > >> > > > > > -- > > You received this message because you are subscribed to the Google Groups > > "TurboGears" group. > > To view this discussion on the web visit > > https://groups.google.com/d/msg/turbogears/-/L9-eC9I7gBkJ. > > > > 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. > > -- > 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. > > -- 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.

