Andreas Pauley wrote:
> 
> For some reason you have to "return" everything that should be available
> to zope. You can return a sequence and loop through it with DTML or you
> can build a variable with everything you want to display and then return
> the variable.
> 
> I have no idea why this is so, and why you can't just the print
> statement as an equivalent to <dtml-var>.
> 
> There is probably elegant ways of replacing DTML with external methods
> or Python Methods, I was just unable to find documentation and examples
> on it until now. Can anyone help with this?
> 
> Regards,
> Andreas.

there are a couple of ways. first zope's publishing objects. if your
publishing a dtml method object than the semantics of it require that
values be inserted into the template/page thats being returned to the
user. you can also publish an external method or a python module
directly(indeed Zope is just a published python module). but sticking to
zope external methods, an example, if you had

def myhello_world(self, REQUEST):

        page = " welcome to %s corner of my hello world
"%self.getParentNode().id


and just browse directly to the external method. its important to keep
in mind that stdout isn't connected to the client. the client is
connected to medusa/ZServer, which gives a channel to ZPublisher to
publish data that will be returned to the client. this mainly applies to
fs code, i'm not totally sure about the semantics of web python
methods.  i know this probably goes a bit further down the rabbit hole
than you might be interested in going. if you want to know some more of
the details. 

check out the medusa docs at
http://www.nightmare.com/medusa

and the ZPublisher docs under the Documentation Sec. of Zope.org. 
These are dated but they give a understanding of the interaction between
medusa's asynch interfaces and zope.

and of course the source code.

you could also use document templates directly from python

def new_world_order(self, REQUEST):
        from DocumentTemplate import HTML

        my_sites = [('My homepage','http://homepage'), 
                    ('my favorite bookstore','http://amazon.com')
                , ... etc]

        
        page_to_return = """
        <html>
        <body>

        <ul>
        <dtml-in sites>
        <li><a href="<dtml-var sequence-item>"><dtml-var sequence-key></a></li>
        </dtml-in>
        </ul>

        </body>
        </html>

        """

        return HTML(my_sites)(sites=my_sites)

or evaluate a dtml file on the file system using HTMLFILE

see the DocumentTemplate directory for source and more examples

D.Templates also give you a pretty good separation of app. logic and
presentation. Doing straight python insertion in a page is not the Zope
Way. if you're interested in this type of thing, you might want to check
out some other python projects like mod_snake (apache),
pywx.sourceforge.net (aolserver), or webware. I'll think you find the
benefits of doing it through DTML offer you a lot more benefits in terms
on maintainbility and site management.

Cheers

Kapil


> > Sven Hohage wrote:
> >
> > Hallo,
> > that's the problem:
> > I've made an external method which is working with lists and should
> > return the result to Zope. The python code is working very well, but
> > is sending everything to sys.stdout( I'm using the
> > print-statement).How do I convince  Zope to print the result on the
> > html-page.
> >    Thanks.
> 
> --
> In a world without fences, who needs gates?
> 
> _______________________________________________
> Zope maillist  -  [EMAIL PROTECTED]
> http://lists.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists -
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope-dev )

_______________________________________________
Zope maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope-dev )

Reply via email to