FlexFAQ

Активный раздел: Я точно знаю, что id объекта = XXX, но сравнение <dtml-if "id == 'XXX'"> выдает false. В чем дело?

Вопрос: Я точно знаю, что id объекта = XXX, но сравнение <dtml-if "id == 'XXX'"> выдает false. В чем дело?

Ответ: Проблема заключается в том, что иногда id не строка, а функция, которую еще надо вызвать. То есть в Вашем случае это будет <dtml-if "id() == 'XXX'">. Для того, чтобы не разбираться каждый раз отдельно, является ли id строкой или функцией, Вы можете заставить Zope выдавать строку или вызывать функцию: <dtml-if "_['id'] == 'XXX'">. Конструкция _['id'] автоматически рендерит объект, имя которого передано (в даном случае id). Это эквивалентно _.getitem('id', 1). Примечание. _.getitem('id', 0) вернет сам объект, без его насильственного вызова. Примечание 2. В Zope 2.3 будет введен интерфейс getId().