[Zope] dictionary from sequence-item
David H
bluepaul at earthlink.net
Mon Jun 19 15:19:39 EDT 2006
Alric Aneron wrote:
> Hello,
> I am looping through a list of dictionary objects using <dtml-in...
> and within the dtml-in body I have:
> <dtml-var "_.getitem('sequence-item')['titled']" missing="none">
> Some of the dictionaries in the list don't have 'titled' key so it
> should replace it with the word "none", but it gives me an error
> *Error Type: KeyError*
> *Error Value: 'titled'
> * I don't understand. Another option is that I can use <dtml-if
> "_.getitem('sequence-item').has_key('titled')"> but it doesn't work,
> says has_key is an unknown attribute. This is the stupidest thing
> ever! it's a dictionary object!
> I try to typecast it using the
> dict(_.getitem('sequence-item')).has_key('titled') it gives me an
> error saying it can't typecast, but I am 100% sure it's a dictionary
> object because I can access it easily
> _.getitem('sequence-item')['titled'] for those that have that key.
>
> Any idea how I can check if the titled key is in the dictionary for
> the current list item?
>
> Thanks in advance guys!
>
> ------------------------------------------------------------------------
Alric,
Your earlier post indicated that your DTML obtains the sequence of
dictionaries from a python script - and *then* tries to filter it and
process it.
Why not do your filtering, e.g. appending only thoses values that have a
key == 'key1' in your python script first? Thats why "god" invented
python scripts :-) .
And as Jonathan indicated, you should also simplify the list returned.
I would just return a list of filtered values, e.g.
# -----------------------------------------------
# python script (based on your earlier message)
# -----------------------------------------------
# DTML call to this script can pass these as parameters or obtain them
from the request ...
mydict = {'key1': 'value1', 'key2': 'value2'}
mydict2 = {'key1': 'value3', 'key2': 'value4'}
desired_key = 'key1'
#results bucket
finalList = []
for dict in (mydict,mydict2): # we avoid returning list of dictionaries
which can be awkward in DTML
for k in dict.keys():
if k == desired_key: # <------- filter it here so DTML doesn't
have to
finalList.append( dict[ k ] )
return finalList
Now your DTML is simple.
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope/attachments/20060619/808c90c6/attachment.htm
More information about the Zope
mailing list