[Zope-dev] Newbie SQL Question
HI! I am having a slight newbie problem and for the life of me cannot find any references for how to do it. I have input boxes on a page. I want the information from that box to be input into a database table upon clicking the Submit button. I cannot figure out how to get that information from point 'A' to point 'B'. PLEASE HELP! TIA, Yvonne Totty ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
[Zope-dev] Help, please!!! __call__ problems with DTML templates
Today is not a good day:-( I've just spent 2 days trying to force __call__ to render my product properly, got every error possible at least seven times, and wasted last night working out what was wrong with Refresh (I was calling refresh on the wrong product. Duh!). Please, please, please, can someone point me in the right direction. I have a class called Element which has three components: 1. purpose: a string describing the element's role (rendered as structured text) 2. template: a string that is rendered to display the element (DTML) 3. Element inherits from Folder so it can contain sub-elements which can be included in the template For example, suppose A is an element that contains a sub-element B (i.e. B is A.B) Ahas template 'Element A contains dtml-var B' and purpose 'Contain B' Bhas template 'element B, which contains nix' and purpose 'Element with no subelement' Now for the tricky bit: "dtml-var A" needs to be rendered one of three possible ways depending on a variable in the REQUEST. So __call__ needs to return one of - case a: the purpose property (as structured text) wrapped in [] - case b: render the template, with sub-elements properly rendered - case c: render the template, with sub-elements wrapped in [] showing their purpose Then 'dtml-var A' must be rendered in the three cases as: - case a: '[Contain B]' - case b: 'Element A contains element B, which contains nix' - case c: 'Element A contains [Element with no subelement]' To do this, I need to write my own __call__ method since __call__ is what detemines how objects gets rendered in DTML (is this correct?) def __call__(self, client=None, REQUEST={}, RESPONSE=None, **kw): With this, I discovered that 'dtml-var A' gives client=None and REQUEST={} while 'dtml-var "A(_,REQUEST)"' gets client=_ and REQUEST=REQUEST. But I cannot for the life of me, work out how to do what I need. In particular: 1.) How do you magically get the DTML context from 'dtml-var A' without having to resort to 'dtml-var "A(_,REQUEST)"' in the templates? In the __call__ methods of different classes, I've seen some code like: 'if REQUEST is None and not kw: REQUEST=self.REQUEST' (from Catalog.py) and other code like 'if hasattr(self, 'aq_explicit'): bself=self.aq_explicit else: bself=self' and 'security=getSecurityManager() security.addContext(self)' (from DTMLDocument.py) I can't see any consistency in what these classes are doing, so I don't know what I need to do. 2.) How to convert an arbitrary text string into rendered DTML inside a python product method? How do you get the object's properties, REQUEST and acquisition context all in the namespace? I've been trying code like: template = 'span class="purpose"dtml-var purpose fmt="structured_text"/span' dtml = HTML(template, globals()) rendered = dtml(self, REQUEST) but this doesn't work. All the example classes I've seen (such as ZWikiPage.py in ZWiki) use DTMLDocument as their base class so can call DTMLDocument's __call__ on themselves as in text = apply(DTMLDocument.__call__,(self, client, REQUEST, RESPONSE), kw)(ZWikiPage.py, line 135) This doesn't help me because I don't have DTMLDocument as a base class. Looking through the source for DTMLMethod etc is not very clear because lots of "apply(__call__,(...),kw)" calls are all mixed up with acquisition code. 3.) Do I need to write a custom tag (dtml-element A) to get this behaviour? So, if anyone out in Zope land can help me, I'll be eternally grateful. I've exhausted my patience looking through the NIP mailing list archives, the How-Tos and the Zope site and need to have something to demonstrate on Thursday. Thanks in advace, Stephen P.S. ChrisW, searching NIP for "__call__" returns every message with 'call' in it, which is not quite the same thing! ___ Stephen Simmons HealthArena B.V. phone +31 20 486 0555 mobile +31 6 1505 3086 [EMAIL PROTECTED] ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Newbie SQL Question
On 10/10/00 11:33 AM, "Yvonne Totty" [EMAIL PROTECTED] wrote: HI! I am having a slight newbie problem and for the life of me cannot find any references for how to do it. I have input boxes on a page. I want the information from that box to be input into a database table upon clicking the Submit button. I cannot figure out how to get that information from point 'A' to point 'B'. Assuming your form has a field named the same as all of columns you want to insert (i.e. Foo, bar, whatever)... Then you can have it post to another method that has a line like this in it: dtml-call name="sqlInsertValues" And then have a SQLMethod called 'sqlInsertValues' that has a body like this: INSERT INTO mytable ( column1, column2, column3 ) VALUES ( dtml-sqlvar name="column1" type=string, dtml-sqlvar name="column2" type=int, dtml-sqlvar name="column3" type=string ) Remember to put these in the arguments list, or they won't be caught from the REQUEST namespace. Chris -- | Christopher Petrilli Digital Creations | [EMAIL PROTECTED]Where Zope comes from ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Help, please!!! __call__ problems with DTML templates
Stephen Simmons wrote: 1.) How do you magically get the DTML context from 'dtml-var A' without having to resort to 'dtml-var "A(_,REQUEST)"' in the templates? Give your class a class attribute of isDocTemp=1. This tells the DTML method calling machinery that you want to receive the namespace as REQUEST as the third argument to your __call__ method. There was a thread on this in zope-dev on and around 26 September, subject "more __call__ ..." In the __call__ methods of different classes, I've seen some code like: 'if REQUEST is None and not kw: REQUEST=self.REQUEST' (from Catalog.py) Your method will usually get called with its third argument as the namespace, or REQUEST. However, sometimes, it may just be called with a "self" argument. The code in Catalog.py is falling back on getting the REQUEST out of the self argument, if it is not explicitly passed a namespace to work with. I can't see any consistency in what these classes are doing, so I don't know what I need to do. Most developers would like more consistency here :-) I'm hoping that all this will be much much clearer for Zope 2.3. That doesn't help much for now though. 2.) How to convert an arbitrary text string into rendered DTML inside a python product method? How do you get the object's properties, REQUEST and acquisition context all in the namespace? I've been trying code like: template = 'span class="purpose"dtml-var purpose fmt="structured_text"/span' dtml = HTML(template, globals()) If all you want to do is render some Structured Text, you can import and use the StructuredText module directly. P.S. ChrisW, searching NIP for "__call__" returns every message with 'call' in it, which is not quite the same thing! For cases like that, I have downloaded the plaintext mail archives as available from http://www.zope.org/Resources/MailingLists I then use unix grep on them to search for just what I need. -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Help, please!!! __call__ problems with DTML templates
Stephen Simmons wrote: 2.) How to convert an arbitrary text string into rendered DTML inside a python product method? How do you get the object's properties, REQUEST and acquisition context all in the namespace? I've been trying code like: template = 'span class="purpose"dtml-var purpose fmt="structured_text"/span' dtml = HTML(template, globals()) rendered = dtml(self, REQUEST) Here's an except from my Python interactive interpreter: import DocumentTemplate my_dt=DocumentTemplate.HTML("""dtml-var "1+a) my_dt(None, {'a':4}) '5' The object my_dt is callable, and takes the arguments (client, namespace). You can put a REQUEST in place of the simple dictionary I used above. If you're trying this, make sure you have the PYTHONPATH environment variable set to /your/zope/directory/lib/python -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Help, please!!! __call__ problems with DTML templates
From: Stephen Simmons [EMAIL PROTECTED] 1.) How do you magically get the DTML context from 'dtml-var A' without having to resort to 'dtml-var "A(_,REQUEST)"' in the templates? A.isDocTemp = 1 # or make it a shared class attribute 2.) How to convert an arbitrary text string into rendered DTML inside a python product method? Here's what I use: from Globals import HTML from AccessControl import getSecurityManager class DTML(HTML): """DTML objects are DocumentTemplate.HTML objects that allow dynamic, temporary creation of restricted DTML.""" def __call__(self, client=None, REQUEST={}, RESPONSE=None, **kw): """Render the DTML given a client object, REQUEST mapping, Response, and key word arguments.""" security=getSecurityManager() security.addContext(self) try: return apply(HTML.__call__, (self, client, REQUEST), kw) finally: security.removeContext(self) def validate(self, inst, parent, name, value, md): return getSecurityManager().validate(inst, parent, name, value) Cheers, Evan @ digicool 4-am ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )