LightOfMooN
Сен. 23, 2010 15:42:19
Я менял пермишны непосредственно в кодах Container, Folder, BTreeContainer на Zope.Public. Ошибка всеравно остаётся. Да и непонятно, причём тут пермишны, если ошибка есть даже у менеджера, у которого полные права.
Sleepwalker
Сен. 23, 2010 15:45:45
1. Никак не пойму откуда взялся метод objectValues. Смотрел в исходниках компонентов - его там нет.
2. У вашего контейнера нет никаких обьектов внутри и все что вы от него можете получить - это значения полей из вашей схемы (name, image).
Попробуйте написать:
<span tal:content="context/name" />
Должно работать…
LightOfMooN
Сен. 23, 2010 15:49:27
context/name работает.
Сам искал в исходниках и не нашёл. Но ведь в оффициальной документации в руководстве есть примеры!
Даже если не брать в расчёт objectValues, то хотя бы контент-тип то можно получить
context/meta_type…
Да и обычно если атрибута нет вообще, появляется AttributeError, а тут ForbiddenAttribute (запрещённый атрибут), что действительно наводит на мысль о проблемах с разрешениями.
LightOfMooN
Сен. 23, 2010 15:54:18
в классе вида пишу метод
def getMetaType(self):
return self.context.meta_type
вызываю в шаблоне
<span tal:content=“view/getMetaType”/>
и та же самая ошибка
Sleepwalker
Сен. 23, 2010 15:55:47
AttributeError не выдается т.к. zope сначала проверяет права доступа на аттрибут (не зная существует он или нет) а потом уже пробует к нему достучатся. Есле есть права и нет такого атрибута - вот тогда AttributeError.
Sleepwalker
Сен. 23, 2010 15:58:04
Атрибута meta_type у BTreeContainer нет и у вашего обьекта тоже, поэтому и ошибка.
regall
Сен. 23, 2010 15:59:39
Ну попробуйте в виде сделать
from zope.security.proxy import removeSecurityProxy
....
self.context = removeSecurityProxy(context)
Будет ли ошибка выскакивать.
LightOfMooN
Сен. 23, 2010 16:02:58
Sleepwalker
Атрибута meta_type у BTreeContainer нет и у вашего обьекта тоже, поэтому и ошибка.
Точно, вы абсолютно правы. Только что проверил.
т.е. тут 2 варианта:
1) либо атрибут (к примеру, meta_type) существует, но права не выданы
2) либо атрибута вообще не существует
regall
Сен. 23, 2010 16:09:49
Раскопал-таки.
meta_type - это атрибут для одного из способов поиска объектов в Zope2, а в Zope3 его нет, так как незачем. Нашел
тут.
LightOfMooN
Сен. 23, 2010 16:09:59
def getMetaType(self):
self.context = removeSecurityProxy(context)
return self.context.meta_type
AttributeError: ‘Section’ object has no attribute ‘meta_type’