Почему 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.