Sektionen
Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support Dokumentation docs Plone: Archetypes DisplayList

Plone: Archetypes DisplayList

In Archetypes werden häufig Objekte vom Typ DisplayList verwendet, um Daten für Auswahllisten bereitzustellen. Nachfolgend finden Sie ein paar Tipps zur Verwendung dieser Objekte.

DisplayList erzeugen

from Products.Archetypes.public import DisplayList
dl = DisplayList()

oder gleich mit Werten

dl.DisplayList(
(
('key1', 'value1'),
('key2'), 'value2'),
)
)

Listenelemente hinzufügen

dl.add('key1', 'value1')
dl.add('key2', 'value2', 'value2_i18n_label')

Schlüssel für einen bestimmten Wert ermitteln

dl.getKey(value)

Wert für einen bestimmten Schlüssel ermitteln

dl.getValue(key)

i18n MsgId für einen bestimmten Schlüssel ermitteln

dl.getMsgId(key)

Key's auslesen

dl.keys()

Value's auslesen

dl.values()

Item's auslesen

dl.items()

sortedByValue

Gibt eine neue, nach Werten sortierte DisplayList zurück.

dl.sortedByValue()

sortedByKey

Gibt eine neue, nach Schlüsseln sortierte DisplayList zurück.

dl.sortedByKey()

 

Den gesamten Code der DisplayList finden sie hier, dieser Stammt aus:

Products.Archetypes-1.5.16-py2.4.egg/Products/Archetypes/utils.py

"""Static display lists, can look up on
either side of the dict, and get them in sorted order

NOTE: Both keys and values *must* contain unique entries! You can have
two times the same value. This is a "feature" not a bug. DisplayLists
are meant to be used as a list inside html form entry like a drop down.

>>> dl = DisplayList()

Add some keys
>>> dl.add('foo', 'bar')
>>> dl.add('egg', 'spam')

Assert some values
>>> dl.index
2
>>> dl.keys()
['foo', 'egg']
>>> dl.values()
['bar', 'spam']
>>> dl.items()
( ('foo', 'bar'), ('egg', 'spam') )

You can't use e.g. objects as keys or values
>>> dl.add(object(), 'error')
Traceback (most recent call last):
TypeError: DisplayList keys must be strings or ints, got <type 'object'>

>>> dl.add('error', object())
Traceback (most recent call last):
TypeError: DisplayList values must be strings or ints, got <type 'object'>

GOTCHA
Adding a value a second time does overwrite the key, too!
>>> dl.add('fobar' ,'spam')
>>> dl.keys()
['foo', 'fobar']

>>> dl.items()
( ('foo', 'bar'), ('fobar', 'spam') )

Install warning hook for the next tests since they will raise a warning
and I don't want to spoil the logs.
>>> from Testing.ZopeTestCase import WarningsHook
>>> w = WarningsHook(); w.install()

Using ints as DisplayList keys works but will raise an deprecation warning
You should use IntDisplayList for int keys

>>> idl = DisplayList()
>>> idl.add(1, 'number one')
>>> idl.add(2, 'just the second')

>>> idl.items()
( (1, 'number one'), (2, 'just the second') )

Remove warning hook
>>> w.uninstall(); del w
"""