跳转到主要内容

Plone的静态文件

项目描述

简介

plone.resource通过ZPublisher发布静态文件目录。这些目录可以位于ZODB中(作为OFS文件夹和文件),或位于文件系统中。

每个资源目录都有一个类型和一个名称。当结合使用时,这些用于遍历到资源目录。例如

/++theme++mytheme/<subpath>
/++sitelayout++mylayout/<subpath>
/++templatelayout++mylayout<subpath>

资源可以存储的位置

资源目录的内容可以通过遍历器在几个不同的位置找到。以下位置按顺序尝试。

ZODB中的文件

安装plone.resource创建一个名为portal_resources的Zope文件夹。它可以用于持久化存储资源目录。按照惯例

  • 此文件夹下的顶级文件夹对应于资源类型,

  • 二级文件夹对应于资源目录名称。

因此,在/++theme++mytheme/myfile可遍历的文件可能物理上位于some_site/++etc++site/resources/theme/mytheme

Python发行版中的文件

Python发行版(例如egg)中的一个文件夹可以作为特定类型和名称的资源目录进行注册,使用plone:static ZCML指令。例如,此指令将名为“theme”的目录注册为名为“mytheme”的类型的资源目录。它将在++theme++mytheme处可访问

  <plone:static
      directory="theme"
      type="theme"
      name="mytheme"
  />

.. note::
   You must do ``<include package="plone.resource" file="meta.zcml"/>``
   before you can use the plone:static directive.

资源目录的名称默认为包名,因此可以省略。例如,以下名为“mytheme”的包中的指令将导致与上述相同的注册

<plone:static
    directory="resources"
    type="theme"
/>

出于安全原因,不支持使用..在目录路径中向上遍历,因为这可能会允许不受欢迎的文件访问。

最小zcml配置示例

<configure xmlns:plone="http://namespaces.plone.org/plone">
  <include package="plone.resource" file="meta.zcml"/>
  <plone:static
      directory="resources"
      type="theme"
      name="myproject"
    />
</configure>

..

中央资源目录中的文件

如果从site.zcml(即,在ZCML导入上下文中没有活动包)中使用plone:static指令,则可以指定顶级资源目录的绝对路径。

此目录应具有与上述解释相同的子目录结构(ZODB资源目录)

  • 此文件夹下的顶级文件夹对应于资源类型,

  • 二级文件夹对应于资源目录名称。

此外,为了使资源可用,顶级目录需要注册一个遍历器

例如,以下在site.zcml中注册了构建out根目录内的给定路径

<plone:static
    directory="/path/to/buildout/resources"
/>

为了在构建out时间自动化此操作,plone.recipe.zope2instance配方具有resources选项。它通过指定选项将上述zcml片段注入site.zcml中,如下所示

[instance]
...
resources = ${buildout:directory}/resources
...

示例:使用plone.app.theming - 提供了++theme++遍历器 - 给定一个位于文件系统中的图像文件

${buildout:directory}/resources/theme/my.project/logo.png``

这将通过以下URL可遍历

https://127.0.0.1:8080/Plone/++theme++my.project/logo.png

附加遍历器

可以通过ZCML使用适配器注册自定义遍历器

<adapter
    name="demo"
    for="* zope.publisher.interfaces.IRequest"
    provides="zope.traversing.interfaces.ITraversable"
    factory="my.project.traversal.MyTraverser"
/>

具有相应的简单工厂定义的

from plone.resource.traversal import ResourceTraverser
class MyTraverser(ResourceTraverser):
    name = 'demo'

当与中央资源目录中的文件部分以上的配置一起使用时,这意味着位于

${buildout:directory}/resources/demo/my.project/logo.png

的资源将通过以下URL可遍历

https://127.0.0.1:8080/Plone/++demo++my.project/logo.png

变更日志

3.0.2 (2024-04-23)

错误修复

  • 从plone.base导入IPloneSiteRoot。@davisagli (#45)

3.0.1 (2024-01-22)

内部

  • 更新配置文件。[plone 开发者] (047ec50d, 6e36bcc4)

3.0.0 (2023-04-27)

重大更改

  • 停止支持Plone 5.2和Python 2。[gforcada] (#6)

内部

  • 更新配置文件。[plone devs] (2a4ba395)

2.1.4 (2021-06-14)

错误修复

  • 在遍历到FilesystemResourceDirectory时不要抛出错误。[#31]

2.1.3 (2020-09-28)

错误修复

  • 修复了各种警告。[maurits] (#3130)

2.1.2 (2020-04-22)

错误修复

  • 微小的打包更新。[#1]

2.1.1 (2019-02-08)

错误修复

  • 修复了弃用和资源警告。[gforcada] (#29)

2.1.0 (2018-11-02)

错误修复

2.0.2 (2018-06-04)

错误修复

  • 更多的Python 3修复。[ale, pbauer]

2.0.1 (2018-02-05)

新特性

  • 添加Python 2/3兼容性

2.0.0 (2018-01-17)

重大更改

  • 移除Python2.6支持。[ale-rt]

错误修复

  • 修复了在FilesystemResourceDirectory表示中出现的“ValueError: substring not found”错误。这发生在你注册一个与目录名不同的名称的目录时。访问/++theme++myname url时会得到这个错误。我们还避免了在目录名可能多次出现在路径中的情况下列出路径的较长部分。[maurits]

1.2.1 (2016-12-30)

错误修复

  • ‘unittest2’是测试依赖项,在setup.py中明确指出。[jensens]

1.2 (2016-11-09)

新特性

  • 在资源创建/修改时触发事件。[jpgimenez, ebrehault]

1.1 (2016-10-04)

新特性

  • 使用mimetypes_registry实用程序来确定mimetype(如果可用)。[jensens]

错误修复

  • 删除重复导入。[jensens]

  • 在Python文件中添加编码头。[gforcada]

1.0.7 (2016-09-08)

错误修复

  • 应用了20160830安全热修复。[maurits]

1.0.6 (2016-08-10)

修复

  • 运行测试时不要留下.svn文件。[maurits]

  • 使用zope.interface装饰器。[gforcada]

1.0.5 (2016-02-26)

修复

  • 测试修复:clearZCML已被从zope.component.tests中删除。[thet]

  • 清理:PEP8、plone编码约定、ReST修复、文档全面审查等。[jensens]

1.0.4 (2015-03-21)

  • 在写入不仅仅是text/html时使用utf-8编码。[vangheem]

  • 在FilesystemResourceDirectory中提供了一个适当的__contains__方法。[ebrehault]

1.0.3 (2014-10-13)

  • 安全加固:我们不希望匿名用户查看我们的fs。[giacomos]

1.0.2 (2013-01-01)

  • 尚未有任何更改。

1.0.1 (2012-05-25)

1.0 (2012-04-15)

  • 为可写资源目录添加__setitem__()支持。[optilude]

1.0b6 (2011-11-24)

  • 为可写资源目录添加rename()方法。[optilude]

  • 在utils模块中添加cloneResourceDirectory()辅助方法。[optilude]

  • 为资源目录添加一个++unique++资源遍历器,将其缓存为‘plone.stableResource’。[elro]

1.0b5 (2011-06-08)

  • 确保在iterDirectoriesOfType中跳过任何文件。[elro]

1.0b4 (2011-05-29)

  • 添加queryResourceDirectory()辅助方法。[optilude]

1.0b3 (2011-05-23)

  • 修复了具有子目录的资源目录下载错误。[elro]

1.0b2 (2011-05-16)

  • 为文件系统文件添加了一个更兼容的filestream迭代器,允许强制转换为字符串或unicode。这修复了通过资源注册表进行资源合并时的可能兼容性问题。[optilude]

1.0b1 (2011-04-22)

  • 初始发布

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源分发

plone_resource-3.0.2.tar.gz (36.8 kB 查看散列值)

上传时间

构建分发

plone.resource-3.0.2-py3-none-any.whl (35.9 kB 查看散列值)

上传时间 Python 3

由以下提供支持