[Zope] Problem w/ lines-->List in edit form
Tino Wildenhain
tino@wildenhain.de
Tue, 08 May 2001 22:39:53 +0200
Hi sean,
I would use the following code:
def deDupe(self):
keywords=[]
for kw in self.keywords:
if kw and not kw in keywords:
keywords.append(kw)
keywords.sort()
self.keywords=keywords
Assuming your empty line is really empty.
HTH
Tino Wildenhain
--On Dienstag, 8. Mai 2001 11:55 -0700 sean.upton@uniontrib.com wrote:
> Weird problem I am having with "lines" properties, mapping them to a
> python list in a product.
>
> In a python product I'm working on, one class property in my primary class
> is a python list (well, an enhanced list class instance based upon a
> python list for underlying storage). This keyword class has a method
> called asTuple() which returns the list as a tuple; this is used to fill
> a DTML edit form textarea that uses "lines" as a type for the request
> object upon submission. This seems to work right, doing this:
>
> <textarea name="keywords:lines" cols="40" rows="6"><dtml-in
> expr="keywords.asTuple()"><dtml-var sequence-item>
> </dtml-in></textarea>
>
> [Notice the line feed before the </dtml-in>...]
>
> Upon submission, manage_edit does a self.setKeys(REQUEST['keywords']),
> where setKeys() accepts a list, then removes duplicate entries, and goes
> through the resulting de-duplicated list of words, and uses a list
> append() method to add each entry.
>
> Upon submission of this form, however, it adds an empty string as the 1st
> element of the list. This doesn't happen when unit testing my python code
> for my setKeys() method from the python shell.
>
> What I am guessing is happening is that there is a blank line inserted AT
> THE END of the textarea. This is then shifted to the front when my code
> runs a sort() on the list as part of the de-duplication process. My
> de-duplication code:
>
> def deDupe(self):
> """Scans through keyword list and de-dupes multiple entries for
> the same keyword"""
> #3 things: 2 loops and a sort, plus recursion via the 2nd loop -
> inefficient, but works
> for kw in self.keywords:
> if (self.keywords.count(kw) > 1): #If duplicate(s) of
> current kw, get rid of this one
> self.keywords.remove(kw) #technically, this
> removes 1st instance in list, this works
> #now, check for more duplicates, since above sometimes won't work
> in cases of several repreats
> for kw in self.keywords:
> if (self.keywords.count(kw) > 1):
> self.deDupe()
> self.keywords.sort() #sort the list
>
> I figure that I could incorporate code to get rid of "empty" list entries.
> Is there an easier way to do this? The extra line feed at the end of the
> text area ends up being a nuisance, but I'm not sure if there is a way to
> get the DTML to output HTML just right so it works. I suppose that others
> have encountered this weirdness before. Thoughts?
>
> Sean
>
> =========================
> Sean Upton
> Senior Programmer/Analyst
> SignOnSanDiego.com
> The San Diego Union-Tribune
> 619.718.5241
> sean.upton@uniontrib.com
> =========================
>
> _______________________________________________
> Zope maillist - Zope@zope.org
> 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 )