[Zope] Dynamic dictionary keys?
Allow me to preface this by saying I am a complete newbie to Zope (I prefer to think of it as beginner's mind...). What I am attempting to do is dynamically add items to a dictionary, but Zope complains keyword can't be an expression. Here's the reduced case of my code: dtml-let eventsDict={} dtml-let calstart=somestring dtml-call REQUEST.set(eventsDict[calstart]=id) /dtml-let /dtml-let This kind of construct *seems* perfectly reasonable, yet it doesn't work. Any suggestions? Other possible ways of doing the same thing? Thanks! -Andrew - Andrew Hedges, Clearwired Web Services [EMAIL PROTECTED] / http://clearwired.com/ ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Dynamic dictionary keys?
- Original Message - From: Andrew Hedges [EMAIL PROTECTED] To: zope@zope.org Sent: Monday, February 27, 2006 11:56 AM Subject: [Zope] Dynamic dictionary keys? Allow me to preface this by saying I am a complete newbie to Zope (I prefer to think of it as beginner's mind...). What I am attempting to do is dynamically add items to a dictionary, but Zope complains keyword can't be an expression. Here's the reduced case of my code: dtml-let eventsDict={} dtml-let calstart=somestring dtml-call REQUEST.set(eventsDict[calstart]=id) /dtml-let /dtml-let It is much easier in python script, but if you really want to use dtml: dtml-call REQUEST.set('eventsDict', {}) dtml-call eventsDict.update({'calstart' : id}) hth Jonathan ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Dynamic dictionary keys?
On 27.02.06 09:56:49, Andrew Hedges wrote: Allow me to preface this by saying I am a complete newbie to Zope (I prefer to think of it as beginner's mind...). What I am attempting to do is dynamically add items to a dictionary, but Zope complains keyword can't be an expression. Here's the reduced case of my code: dtml-let eventsDict={} dtml-let calstart=somestring dtml-call REQUEST.set(eventsDict[calstart]=id) /dtml-let /dtml-let First let me tell you: Write a python script for things like this, it really belongs into one. Second thing: your dtml-call has a serious error, eventsDict[..]=id is executed but it doesn't produce anything so set is called with no parameters and this is wrong. set needs 2 parameters, one beeing a string as the key and a second as the value which can be of any type python knows. I also don't get what this snippet should do? Andreas -- Today is the first day of the rest of your life. ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Dynamic dictionary keys?
Andreas and Jonathan, Thanks for the responses! As I said, I am completely new to Zope/ Python, so I appreciate your help. I'll look into how this could be done with a Python script instead of DTML, but this version of our product is all DTML, so that's why I'm using this solution for now. Next version we're moving to Zope 3, so things should get better! In any case, Jonathan's solution worked (though he had single quotes around 'calstart' which shouldn't have been there.) What I'm doing is setting up a hash table so I can do some branching in a separate loop. I have a feeling I'm building a hash table for something I may be able to access directly, but it's working, so I don't want to take up more space in peoples' inboxes. Thanks again for the quick help! -Andrew On Feb 27, 2006, at 10:15 AM, Andreas Pakulat wrote: On 27.02.06 09:56:49, Andrew Hedges wrote: Allow me to preface this by saying I am a complete newbie to Zope (I prefer to think of it as beginner's mind...). What I am attempting to do is dynamically add items to a dictionary, but Zope complains keyword can't be an expression. Here's the reduced case of my code: dtml-let eventsDict={} dtml-let calstart=somestring dtml-call REQUEST.set(eventsDict[calstart]=id) /dtml-let /dtml-let First let me tell you: Write a python script for things like this, it really belongs into one. Second thing: your dtml-call has a serious error, eventsDict[..]=id is executed but it doesn't produce anything so set is called with no parameters and this is wrong. set needs 2 parameters, one beeing a string as the key and a second as the value which can be of any type python knows. I also don't get what this snippet should do? Andreas ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Dynamic dictionary keys?
- Original Message - From: Andrew Hedges [EMAIL PROTECTED] To: Jonathan [EMAIL PROTECTED] Sent: Monday, February 27, 2006 12:14 PM Subject: Re: [Zope] Dynamic dictionary keys? Thanks, much, Jonathan! We're moving to Zope 3 on the next version of our software, but what I'm working on is part of the last version, which is all DTML. I appreciate your response! It works, though, there was a small error in what you sent: dtml-call eventsDict.update({calstart:id}) There are various forms, all of which are correct, and it depends upon what you are trying to achieve: dtml-call eventsDict.update({calstart:id}) The above format takes two variables, one called calstart and one called id. The value contained within the variable calstart is used as the 'key' and the contents of id are used as the 'value' dtml-call eventsDict.update({'calstart':id}) The above format takes one 'hard-coded' key value 'calstart' and one variable id for the value dtml-call eventsDict.update({'calstart':'id'}) The above format takes a 'hard-coded' key value 'calstart' and a hard-coded value 'id'. None of the above are 'wrong', it just a matter of what you are trying to accomplish. Jonathan Thanks, again! -Andrew On Feb 27, 2006, at 10:05 AM, Jonathan wrote: - Original Message - From: Andrew Hedges [EMAIL PROTECTED] To: zope@zope.org Sent: Monday, February 27, 2006 11:56 AM Subject: [Zope] Dynamic dictionary keys? Allow me to preface this by saying I am a complete newbie to Zope (I prefer to think of it as beginner's mind...). What I am attempting to do is dynamically add items to a dictionary, but Zope complains keyword can't be an expression. Here's the reduced case of my code: dtml-let eventsDict={} dtml-let calstart=somestring dtml-call REQUEST.set(eventsDict[calstart]=id) /dtml-let /dtml-let It is much easier in python script, but if you really want to use dtml: dtml-call REQUEST.set('eventsDict', {}) dtml-call eventsDict.update({'calstart' : id}) hth Jonathan ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Dynamic dictionary keys?
On 2/27/06, Andrew Hedges [EMAIL PROTECTED] wrote: Allow me to preface this by saying I am a complete newbie to Zope (I prefer to think of it as beginner's mind...). Welcome! And let's start with killing off two ideas that most newbies have (because the documentation gives it to the,): 1. Through-the-web development really isn't such a hot idea. :-) Granted, it has it's uses, but most of the time it's a pain in the ass, because: a. By necessity, the extra security needed means you have restrictions that are hard to circumvent. b. It's really hard to have verisoning and making diffs on things that reside in a ZODB. c. A text field in a browser isn't the most programmer friendly editor you can imagine. It is therefore quite likely you want to start making disk-bsed products quite quick. See http://zopewiki.org/DiskBasedProduct Since TTW development was one of the original ideas with Zope, the documentation is very focused on it, but most people notice that it's actually quicker and easier to go the disk-based way. YMMV and so forth. 2. Doing things in the template is not a good idea. As mentioned above, you want to do any kind of logic in python. That means either in a disk-based product, or in a Python-script. The Zope documentation doesn't say this clearly enough. In fact, it often encourages you to do complicated things in DTML. Besides, ZPT is a new and better templating language, you might want to use that instead of DTML. It's largely a matter of taste, I definitely prefer ZPT, but as long as you keep *all* logic from the template it becomes less important. See also: http://blogs.nuxeo.com/sections/blogs/lennart_regebro/2005_04_19_python_statement -- Lennart Regebro, Nuxeo http://www.nuxeo.com/ CPS Content Management http://www.cps-project.org/ ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Dynamic dictionary keys?
Hi Andrew Allow me to preface this by saying I am a complete newbie to Zope In that case, please skip DTML and go straight to ZPT. DTML is like the ghost train in an amusement park, but the ghosts are real. Especially if you're a newbie. dtml-let eventsDict={} dtml-let calstart=somestring dtml-call REQUEST.set(eventsDict[calstart]=id) /dtml-let /dtml-let Don't code python in a template. Call a Python Script which prepares your dictionary instead. E.g. ul tal:define=eventsDict here/getEvents.../ul -- jean ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )