Почему getSite() возвращает объект FormlibValidation

Я установил colle.quickupload на пустом сайте Plone 4.1 и заметил, что когда вы добавляете портлет быстрой загрузки, kss вызывает проверку поля (plone.app.form.kss), функция getSite возвращает объект FormlibValidation, который вызывает сбой словарей при быстрой загрузке.

Обратный отсчет здесь: http://pastebin.com/nvwChpZd

Мой вопрос:

  • Это (функция getSite возвращает объект FormlibValidation) ошибка или предполагаемое поведение?

  • Решение исправить / обойти / заставить коллективный. Работать?

1 ответ

Решение

getSite() возвращает ближайший компонентный сайт (где могут храниться локальные утилиты), что на самом деле означает то, что было в последний раз установлено с помощью setSite (), что обычно происходит при обходе.

Большую часть времени единственным обходным хуком, который вызывает setSite (), является тот, который срабатывает, когда вы пересекаете сайт Plone. Но я думаю, что старый механизм проверки встроенных форм KSS использовал (использует?) Хак, который создает сайт локального компонента на лету (в представлении) и устанавливает его как локальный сайт в течение оставшейся части запроса, чтобы он мог переопределить определенные вещи.

Вы можете отключить проверку (например, отключить соответствующий файл KSS в portal_kss) или исправить c.quickupload, чтобы проверить, является ли результат getSite() ISiteRoot. Если это не так, он должен быть заключен в приобретение, поэтому вы можете сделать aq_parent(site) (или, возможно, site. Parent), чтобы получить родительский элемент в цикле, пока не найдете ISiteRoot.

Другие вопросы по тегам