将标记接口应用于子节特殊呈现的代码请求。
collective.sectionsubskin的Python项目详细描述
Section Sub Skin是一个将接口应用于请求的系统,该请求将
映射到对站点的某个分区的主题应如何更改的描述中。
这些映射不会自动更改主题的内容,但它们在Zope3样式的浏览器视图中可用于条件包涵体。
当前建议的方法(因为不支持DTML视图)
是创建一个使用TAL而不是生成自定义CSS文件的标准DTML方法的视图。
例如,如果所有子组件都包含一个"colour"属性,则当前颜色可以通过以下方式找到:
<;tal:colour replace="view/subskin/colour"on error="string:mydefaultcolour"/>;
borning imports and setup(移到tests.py?)。您可能希望忽略所有这些。:
>;>>来自zope.app.testing导入ztapi
>;>导入zope.interface
>;>来自accesscontrol.securitymanagement导入newsecuritymanager
>;>来自accesscontrol.user导入unricteduser
>;>来自testing.makerequest im端口makerequest
>;>app=makerequest(app)
>;>portal=portal。
>;>newsecuritymanager(none,unrestricteduser('god','',['manager','')
>;>estcase导入用户密码
>;>;browser.addheader('authorization','basic%s:%s'('portal_owner',user_password)),只需要,因为我们的视图是一个虚拟视图,如果通过zcml注册,我们将使用permission=zope2.view
skin.definition import basedefinition
>;>from collective.sectionsubskin.interfaces import isubskindefinition
>;>from collective.sectionsubskin.test\u支持导入iredskin,redskin
r/>
类redskin(basedefinition):
title=u"redskin"
colour=u"ff0000"
type\u interface=iredskin
我们可以将此实例保存在列表中,以便以后插入::
>;>;skins=[]
>;>;skins.append(redskin())
>;>;skins
[<;名为redskin>;]
>;>skins[0].colour
u'ff0000'
/>>>>>来自collective.sectionsubskin.test_支持导入iblueskin,blueskin
>;>;skins.append(blueskin())
同样,在文件系统上,此代码的值为::
class iblueskin(isubskindefinition):
pass
class blueskin(basedefinition):
title=u"blues"kin"
colour=u"0000ff"
type廑interface=iblueskin
skins变量现在包含两个皮肤::
>;
>;skins
[<;sectionsubskin named redskin>;,<;sectionsubskin named blueskin>;]
>;[1].colour
u'0000ff'
站点视图(在测试支持中注册):从collective.sectionsubskin.test支持导入颜色
一个稻谷,所以它实际上是:从collective.sectionsubskin.browser.subskin导入subskin
class colors(subskin):
"颜色"。
def render(self):呈现css。
尝试:
return"""html{background color:%s;}""%"(self.subskin.colour)
除了:
return""
r这个玩具示例
return self
>;>;浏览器。打开("%s/colors.css"%self.portal.absolute_url())
>;>;浏览器。内容
'
它正确地呈现一个空字符串。
但是,如果我们创建了一些子文件夹,则可以将它们分配给子文件夹:
>;>;red=portal[portal.invokefactory("folder","red")]
>;>;zope.interface.alsoprovides(red,(iredskin,))
>;>;blue=portal[portal.invokefactory("folder","blue")]
>>>gt;zope.interface.alsoprovides(蓝色,(iblueskin,))
>>>noskin=portal[portal.invokefactory("folder","noskin")]
>现在,当我们遍历到红色文件夹时,我们会看到红色的皮肤:
>;浏览器。打开("%s/red/colors.css%"self.portal。绝对url())
>;>>浏览器。内容
'html{背景色:ff0000;}'
>但如果我们变蓝,我们会看到另一个选项:
>;>>浏览器。打开("%s/blue/colors.css"%self.portal.absolute\url())
>;>浏览器。内容
'html{背景颜色:0000FF;}'
>任何未标记的文件夹仍不显示子类::
>;>>浏览器。打开("%s/no skin/colors.css"%self.portal.absolute\url())
>;>>浏览器。内容
'
/>
>;>;浏览器。打开("%s/red/blue/colors.css"%self.portal.absolute戋url())
>;>;浏览器。内容
'html{background color:戋0000ff;}
>;浏览器。打开("%s/blue/red/colors.css"%self.portal.absolute戋url())
>>>gt;浏览器。内容
'html{背景色:ff0000;}'
更改日志
=
>0.2
--
0井。2.9有5个1.4.4可以工作,但不受支持。
matthewwilkes
映射到对站点的某个分区的主题应如何更改的描述中。
这些映射不会自动更改主题的内容,但它们在Zope3样式的浏览器视图中可用于条件包涵体。
当前建议的方法(因为不支持DTML视图)
是创建一个使用TAL而不是生成自定义CSS文件的标准DTML方法的视图。
例如,如果所有子组件都包含一个"colour"属性,则当前颜色可以通过以下方式找到:
<;tal:colour replace="view/subskin/colour"on error="string:mydefaultcolour"/>;
borning imports and setup(移到tests.py?)。您可能希望忽略所有这些。:
>;>>来自zope.app.testing导入ztapi
>;>导入zope.interface
>;>来自accesscontrol.securitymanagement导入newsecuritymanager
>;>来自accesscontrol.user导入unricteduser
>;>来自testing.makerequest im端口makerequest
>;>app=makerequest(app)
>;>portal=portal。
>;>newsecuritymanager(none,unrestricteduser('god','',['manager','')
>;>estcase导入用户密码
>;>;browser.addheader('authorization','basic%s:%s'('portal_owner',user_password)),只需要,因为我们的视图是一个虚拟视图,如果通过zcml注册,我们将使用permission=zope2.view
skin.definition import basedefinition
>;>from collective.sectionsubskin.interfaces import isubskindefinition
>;>from collective.sectionsubskin.test\u支持导入iredskin,redskin
r/>
类redskin(basedefinition):
title=u"redskin"
colour=u"ff0000"
type\u interface=iredskin
我们可以将此实例保存在列表中,以便以后插入::
>;>;skins=[]
>;>;skins.append(redskin())
>;>;skins
[<;名为redskin>;]
>;>skins[0].colour
u'ff0000'
/>>>>>来自collective.sectionsubskin.test_支持导入iblueskin,blueskin
>;>;skins.append(blueskin())
同样,在文件系统上,此代码的值为::
class iblueskin(isubskindefinition):
pass
class blueskin(basedefinition):
title=u"blues"kin"
colour=u"0000ff"
type廑interface=iblueskin
skins变量现在包含两个皮肤::
>;
>;skins
[<;sectionsubskin named redskin>;,<;sectionsubskin named blueskin>;]
>;[1].colour
u'0000ff'
站点视图(在测试支持中注册):从collective.sectionsubskin.test支持导入颜色
一个稻谷,所以它实际上是:从collective.sectionsubskin.browser.subskin导入subskin
class colors(subskin):
"颜色"。
def render(self):呈现css。
尝试:
return"""html{background color:%s;}""%"(self.subskin.colour)
除了:
return""
r这个玩具示例
return self
>;>;浏览器。打开("%s/colors.css"%self.portal.absolute_url())
>;>;浏览器。内容
'
它正确地呈现一个空字符串。
但是,如果我们创建了一些子文件夹,则可以将它们分配给子文件夹:
>;>;red=portal[portal.invokefactory("folder","red")]
>;>;zope.interface.alsoprovides(red,(iredskin,))
>;>;blue=portal[portal.invokefactory("folder","blue")]
>>>gt;zope.interface.alsoprovides(蓝色,(iblueskin,))
>>>noskin=portal[portal.invokefactory("folder","noskin")]
>现在,当我们遍历到红色文件夹时,我们会看到红色的皮肤:
>;浏览器。打开("%s/red/colors.css%"self.portal。绝对url())
>;>>浏览器。内容
'html{背景色:ff0000;}'
>但如果我们变蓝,我们会看到另一个选项:
>;>>浏览器。打开("%s/blue/colors.css"%self.portal.absolute\url())
>;>浏览器。内容
'html{背景颜色:0000FF;}'
>任何未标记的文件夹仍不显示子类::
>;>>浏览器。打开("%s/no skin/colors.css"%self.portal.absolute\url())
>;>>浏览器。内容
'
/>
>;>;浏览器。打开("%s/red/blue/colors.css"%self.portal.absolute戋url())
>;>;浏览器。内容
'html{background color:戋0000ff;}
>;浏览器。打开("%s/blue/red/colors.css"%self.portal.absolute戋url())
>>>gt;浏览器。内容
'html{背景色:ff0000;}'
更改日志
=
>0.2
--
0井。2.9有5个1.4.4可以工作,但不受支持。
matthewwilkes