Форум сайта python.su
Я менял пермишны непосредственно в кодах Container, Folder, BTreeContainer на Zope.Public. Ошибка всеравно остаётся. Да и непонятно, причём тут пермишны, если ошибка есть даже у менеджера, у которого полные права.
Офлайн
1. Никак не пойму откуда взялся метод objectValues. Смотрел в исходниках компонентов - его там нет.
2. У вашего контейнера нет никаких обьектов внутри и все что вы от него можете получить - это значения полей из вашей схемы (name, image).
Попробуйте написать:
<span tal:content="context/name" />
Офлайн
context/name работает.
Сам искал в исходниках и не нашёл. Но ведь в оффициальной документации в руководстве есть примеры!
Даже если не брать в расчёт objectValues, то хотя бы контент-тип то можно получить
context/meta_type…
Да и обычно если атрибута нет вообще, появляется AttributeError, а тут ForbiddenAttribute (запрещённый атрибут), что действительно наводит на мысль о проблемах с разрешениями.
Офлайн
в классе вида пишу метод
def getMetaType(self):
return self.context.meta_type
вызываю в шаблоне
<span tal:content=“view/getMetaType”/>
и та же самая ошибка
Офлайн
AttributeError не выдается т.к. zope сначала проверяет права доступа на аттрибут (не зная существует он или нет) а потом уже пробует к нему достучатся. Есле есть права и нет такого атрибута - вот тогда AttributeError.
Офлайн
Атрибута meta_type у BTreeContainer нет и у вашего обьекта тоже, поэтому и ошибка.
Офлайн
Ну попробуйте в виде сделать
from zope.security.proxy import removeSecurityProxy
....
self.context = removeSecurityProxy(context)
Офлайн
SleepwalkerТочно, вы абсолютно правы. Только что проверил.
Атрибута meta_type у BTreeContainer нет и у вашего обьекта тоже, поэтому и ошибка.
Отредактировано (Сен. 23, 2010 16:04:30)
Офлайн
Раскопал-таки.
meta_type - это атрибут для одного из способов поиска объектов в Zope2, а в Zope3 его нет, так как незачем. Нашел тут.
Офлайн
def getMetaType(self):
self.context = removeSecurityProxy(context)
return self.context.meta_type
Офлайн