Re: [Zope3-Users] Getting view result from Python

2007-06-28 Thread Thierry Florac
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

2007-06-27 Thread Thierry Florac

  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

2007-06-27 Thread Christophe Combelles

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

2007-06-27 Thread Thierry Florac
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

2007-06-27 Thread Marius Gedminas
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