Форум сайта python.su
90% примеров из документации к BB не работает.
Банально <span tal:content="python: context.objectValues()“ />
приводит к
ForbiddenAttribute: ('objectValues', <intershop.content.section.section.Section object at 0x0337E7F0>)
<span tal:content=”template/title" />
приводит к
LocationError: (<zope.browserpage.viewpagetemplatefile.ViewPageTemplateFile object at 0x03233830>, ‘title’)
Подскажите, кто знает, как это исправить.
Может какого-то наймспейса не хватает? (тогда не понятно, почему вообще тал и метал работают)
Отредактировано (Сен. 23, 2010 10:57:05)
Офлайн
LightOfMooNЭто значит, что не хватает прав на интерфейс, который содержит атрибут objectValues
ForbiddenAttribute: ('objectValues', <intershop.content.section.section.Section object at 0x0337E7F0>)
<class class = ".section.Section">
...
<require
permission = "zope.Public"
interface = "zope.container.interfaces.IReadContainer"
/>
...
</class>
Офлайн
почему он считает его атрибутом, если это метод?
там же стоит python:
пишу в классе вида:
def getNavTree(self):
list = []
for sec in self.context.objectValues(['Section']):
list.append(sec)
return list
Отредактировано (Сен. 23, 2010 11:31:19)
Офлайн
вот изначальная регистрация класса:
<class class=".section.Section">
<require
interface=".interfaces.ISection"
permission="zope.Public"
/>
<require
set_schema=".interfaces.ISection"
permission="zope.Public"
/>
</class>
Отредактировано (Сен. 23, 2010 11:49:38)
Офлайн
1.
LightOfMooNДаже в википедии написано:
почему он считает его атрибутом, если это метод?
wikipedia2.
В Питоне поля и методы обычно называются общим термином атрибуты
LightOfMooNА что это такое - __conteins__?
For: ('protectedName', <class ‘…section.Section’>, ‘__conteins__’)
Офлайн
Извиняюсь, опечатка -> __contains__
класс section.py
from zope.interface import implements
from zope.container.btree import BTreeContainer
from interfaces import ISection
class Section(BTreeContainer):
implements(ISection)
name=u""
image=None
from zope.container.interfaces import IContainer
from zope.schema import TextLine, Bytes
class ISection(IContainer):
name = TextLine(
title=u"",
default=u"",
required=True)
image = Bytes(
title=u"",
default=None,
required=False)
<configure xmlns="http://namespaces.zope.org/zope">
<interface
interface=".interfaces.ISection"
type="zope.app.content.interfaces.IContentType"/>
<class class=".section.Section">
<require
interface=".interfaces.ISection"
permission="zope.Public"
/>
<require
set_schema=".interfaces.ISection"
permission="zope.Public"
/>
</class>
<include package=".browser" />
</configure>
Офлайн
Права на контейнер в zcml должны быть указаны, иначе вы не сможете использовать ничего из IReadContainer, и из IWriteContainer.
Офлайн
Как, если не секрет?
<class class=".section.Section">
<require
interface=".interfaces.ISection"
permission="zope.Public"
/>
<require
set_schema=".interfaces.ISection"
permission="zope.Public"
/>
<require
interface="zope.container.interfaces.IReadContainer"
permission="zope.Public"
/>
</class>
Офлайн
LightOfMooNА что говорит, я же хрустальным шаром не обладаю.
так даже не запускается
Офлайн
ConfigurationError
For: ('protectedName', <class ‘…section.Section’>, ‘__contains__’)
Офлайн