Re: [Zope3-Users] Getting view result from Python
Le mercredi 27 juin 2007 à 20:17 +0300, Marius Gedminas a écrit : On Wed, Jun 27, 2007 at 04:59:07PM +0200, Thierry Florac wrote: Le mercredi 27 juin 2007 à 14:31 +0200, Christophe Combelles a écrit : Thierry Florac a écrit : I'd like to get a view output from some Python code. Actually, I don't have any problem if I use a page template with a simple tal:x content=structure context/@@viewname / expression and return self.template() in Python. But it should certainly be cleaner and less expensive to get view output directly from Python code, which I don't actually manage to do... It depends on what you call a view, if this is a BrowserPage, you have a __call__ method that returns the output. so just call your view(). If this is a BrowserView, there is no __call__ because a BrowserView is not intended to be published as is. But you can have any method that returns HTML. If you use getMultiAdapter to get the view, all these differences are hidden and you can call the view to get its output. If this is a Viewlet or a ContentProvider, there is a render method that returns the output. (provided you first call the update method) Then it's not really a view, is it? ;-) In fact it's a little bit more complicated... What I have at first is a BrowserPage view, which is generally called from a page template with context/@@viewname syntax, without any problem. But I need also to be able to get the same view output from a JSON call, so that I can update a little bit of HTML code dynamically. I don't have any problem when defining a template with the same syntax. But if I call in python : view = zapi.getMultiAdapter((myContext,myRequest), Interface, name=u'viewname') This should work. You don't have to pass Interface explicitly, by the way, view = getMultiAdapter((context, request), name='...') will work as well. I receive an error message : __init__() takes at least 3 arguments (1 given) I don't believe you :-) Can you show the full traceback? getMultiAdapter definitely passes the context tuple to the adapter's __init__. There must be some other piece of code that fails for you. So zapi.getMultiAdapter creates the view, but how can I initialize it with it's required parameters (context and request) ? getMultiAdapter does that. I speak from personal experience. Whoops ! I'm really sorry but I think I made a stupid mistake in my zapi.getMultiAdapter() call, because I used a custom request as parameter instead of the initial request I received in my JSON MethodPublisher subclass ; that's probably because of several tests I made to get things working as I need... :-( Really sorry again, but now it works perfectly... Thierry Florac -- Chef de projet intranet/internet Office National des Forêts - Département Informatique 2, Avenue de Saint-Mandé 75570 PARIS Cedex 12 Mél : [EMAIL PROTECTED] Tél. : +33 01.40.19.59.64 Fax. : +33 01.40.19.59.85 ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Getting view result from Python
Hi, I'd like to get a view output from some Python code. Actually, I don't have any problem if I use a page template with a simple tal:x content=structure context/@@viewname / expression and return self.template() in Python. But it should certainly be cleaner and less expensive to get view output directly from Python code, which I don't actually manage to do... So any advise to this probably simple problem would be welcome. Thanks, Thierry Florac -- Chef de projet intranet/internet Office National des Forêts - Département Informatique 2, Avenue de Saint-Mandé 75570 PARIS Cedex 12 Mél : [EMAIL PROTECTED] Tél. : +33 01.40.19.59.64 Fax. : +33 01.40.19.59.85 ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] Getting view result from Python
Thierry Florac a écrit : Hi, I'd like to get a view output from some Python code. Actually, I don't have any problem if I use a page template with a simple tal:x content=structure context/@@viewname / expression and return self.template() in Python. But it should certainly be cleaner and less expensive to get view output directly from Python code, which I don't actually manage to do... So any advise to this probably simple problem would be welcome. It depends on what you call a view, if this is a BrowserPage, you have a __call__ method that returns the output. so just call your view(). If this is a BrowserView, there is no __call__ because a BrowserView is not intended to be published as is. But you can have any method that returns HTML. If this is a Viewlet or a ContentProvider, there is a render method that returns the output. (provided you first call the update method) Christophe ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] Getting view result from Python
Le mercredi 27 juin 2007 à 14:31 +0200, Christophe Combelles a écrit : Thierry Florac a écrit : Hi, I'd like to get a view output from some Python code. Actually, I don't have any problem if I use a page template with a simple tal:x content=structure context/@@viewname / expression and return self.template() in Python. But it should certainly be cleaner and less expensive to get view output directly from Python code, which I don't actually manage to do... So any advise to this probably simple problem would be welcome. It depends on what you call a view, if this is a BrowserPage, you have a __call__ method that returns the output. so just call your view(). If this is a BrowserView, there is no __call__ because a BrowserView is not intended to be published as is. But you can have any method that returns HTML. If this is a Viewlet or a ContentProvider, there is a render method that returns the output. (provided you first call the update method) In fact it's a little bit more complicated... What I have at first is a BrowserPage view, which is generally called from a page template with context/@@viewname syntax, without any problem. But I need also to be able to get the same view output from a JSON call, so that I can update a little bit of HTML code dynamically. I don't have any problem when defining a template with the same syntax. But if I call in python : view = zapi.getMultiAdapter((myContext,myRequest), Interface, name=u'viewname') I receive an error message : __init__() takes at least 3 arguments (1 given) So zapi.getMultiAdapter creates the view, but how can I initialize it with it's required parameters (context and request) ? Thanks, Thierry Florac -- Chef de projet intranet/internet Office National des Forêts - Département Informatique 2, Avenue de Saint-Mandé 75570 PARIS Cedex 12 Mél : [EMAIL PROTECTED] Tél. : +33 01.40.19.59.64 Fax. : +33 01.40.19.59.85 ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] Getting view result from Python
On Wed, Jun 27, 2007 at 04:59:07PM +0200, Thierry Florac wrote: Le mercredi 27 juin 2007 à 14:31 +0200, Christophe Combelles a écrit : Thierry Florac a écrit : I'd like to get a view output from some Python code. Actually, I don't have any problem if I use a page template with a simple tal:x content=structure context/@@viewname / expression and return self.template() in Python. But it should certainly be cleaner and less expensive to get view output directly from Python code, which I don't actually manage to do... It depends on what you call a view, if this is a BrowserPage, you have a __call__ method that returns the output. so just call your view(). If this is a BrowserView, there is no __call__ because a BrowserView is not intended to be published as is. But you can have any method that returns HTML. If you use getMultiAdapter to get the view, all these differences are hidden and you can call the view to get its output. If this is a Viewlet or a ContentProvider, there is a render method that returns the output. (provided you first call the update method) Then it's not really a view, is it? ;-) In fact it's a little bit more complicated... What I have at first is a BrowserPage view, which is generally called from a page template with context/@@viewname syntax, without any problem. But I need also to be able to get the same view output from a JSON call, so that I can update a little bit of HTML code dynamically. I don't have any problem when defining a template with the same syntax. But if I call in python : view = zapi.getMultiAdapter((myContext,myRequest), Interface, name=u'viewname') This should work. You don't have to pass Interface explicitly, by the way, view = getMultiAdapter((context, request), name='...') will work as well. I receive an error message : __init__() takes at least 3 arguments (1 given) I don't believe you :-) Can you show the full traceback? getMultiAdapter definitely passes the context tuple to the adapter's __init__. There must be some other piece of code that fails for you. So zapi.getMultiAdapter creates the view, but how can I initialize it with it's required parameters (context and request) ? getMultiAdapter does that. I speak from personal experience. Marius Gedminas -- ...the only place for 63,000 bugs is a rain forest signature.asc Description: Digital signature ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users