[Zope] Passing args to PageTemplateFile instances

Anders Bruun Olsen anders at bruun-olsen.net
Fri Sep 23 07:19:49 EDT 2005


On Fri, Sep 23, 2005 at 12:06:00PM +0100, Peter Bengtsson wrote:
> Please press "Reply-All" and not just to me.

Sorry about that.

> That is the correct way of calling PageTemplateFile objects in python
> code. I've got it working in many places. The error must be either a
> new zope bug or something else being wrong. Is your setup as simple as
> you've described in the email?

Yes. This is the class I am using:

class TestProd(SimpleItem):
    """A TestProd object"""
    meta_type = "TestProd"
    manage_options = (  {"label": "Edit", "action": "manage_main"},
                        {"label": "View", "action": "index_html"})

    manage_main = PageTemplateFile("templates/mainTestProd", globals())
    index_html = PageTemplateFile("templates/indexTestProd", globals())
    test = PageTemplateFile("templates/test", globals())

    def __init__(self, id, title):
        self.id = id
        self.title = title

        def testit(self, REQUEST=None):
                return self.test(self, self.REQUEST, something="blah")

And the "test" template:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"
/>
  <meta name="copyright" content="&copy; 2004 &amp; Anders Bruun Olsen
&lt;anders(AT)bruun-olsen(DOT)net" />
  <link rel="stylesheet" type="text/css" href="css" />
  <title tal:content="container/title_or_id">TITLE</title>
</head>
<body>
        <div>
                <p>Welcome to <tal:block tal:replace="container/title_or_id"/></p>
                <p tal:content="python:str(options)"/>
                <p tal:content="python:len(request.form.keys())"/>
                <p tal:content="python:context.absolute_url_path()"/>
        </div>
</body>
</html>

I have added it to the rootfolder in ZMI with the ID "testing".

> What happens when you in that TAL do something like:
> <br tal:replace="python:str(options)" />

Gives: {'args': ()}

> Do the other namespaces work in the page template? Eg. <br
> tal:replace="python:len(request.form.keys())" /> or <br

Gives: 0

> tal:replace="python:context.absolute_url_path()" />

Gives: /testing

-- 
Anders
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/O d--@ s:+ a-- C++ UL+++$ P++ L+++ E- W+ N(+) o K? w O-- M- V
PS+ PE@ Y+ PGP+ t 5 X R+ tv+ b++ DI+++ D+ G e- h !r y?
------END GEEK CODE BLOCK------
PGPKey: http://random.sks.keyserver.penguin.de:11371/pks/lookup?op=get&search=0xD4DEFED0


More information about the Zope mailing list