支持MIME类型的文本字段
项目描述
简介
此包提供了一个名为 RichText 的 zope.schema 风格字段类型,可以用于存储带有相关MIME类型的值。可以将值转换为输出MIME类型,例如从结构化文本转换为HTML。
基本用法
要使用字段,将其放置在如下所示的架构中
from plone.app.textfield import RichText from zope.interface import Interface class ITest(Interface): bodyText = RichText( title=u"Body text", default_mime_type='text/structured', output_mime_type='text/html', allowed_mime_types=('text/structured', 'text/plain',), default=u"Default value" )
这指定了文本内容的默认MIME类型以及默认输出类型,以及允许的类型元组。所有这些值都是可选的。默认MIME类型为‘text/html’,默认输出类型为‘text/x-html-safe’。默认情况下,allowed_mime_types 为 None,这意味着将允许站点范围内的默认允许输入MIME类型集。
请注意,此处默认值设置为Unicode字符串,将视为默认MIME类型。此值在字段初始化时转换为 RichTextValue 对象(见下文),因此 default 属性将为该类型的对象。
字段实际上存储了一个类型为 plone.app.textfield.value.RichTextValue 的不可变对象。此对象具有以下属性
- raw
原始值作为Unicode字符串。
- mimeType
原始文本的MIME类型。
- output
表示值转换为默认输出MIME类型的Unicode字符串。如果转换无法成功完成,则可能为 None,但在成功转换后将被缓存。
- outputMimeType
输出字符串的MIME类型。这通常从字段的 output_mime_type 属性复制。
存储
output、mimeType 和 outputMimeType 属性将与父内容对象相同的位置上的 _p_jar 存储在一起,而 raw 值则在单独的持久化对象中存储。这是为了优化在对象查看时(因此应避免加载单独的持久化对象)频繁访问 output 的情况,而 raw 值则很少访问(因此除非特别请求,否则不应占用内存)。
转换
转换使用 ITransformer 适配器进行。默认实现使用Plone的 portal_transforms 工具将一个MIME类型转换为另一个MIME类型。请注意,必须安装 Products.PortalTransforms 才能使其工作,否则,将不会注册任何默认的 ITransformer 适配器。您可以使用 [portaltransforms] 额外功能将 Products.PortralTransforms 添加为依赖项。
要从页面模板调用替代转换,可以使用以下便捷语法
<div tal:content="structure context/@@text-transform/fieldName/text/plain" />
在这里 fieldName 是字段的名称(必须在 context 中找到并包含一个 RichTextValue)。 text/plain 是期望的输出MIME类型。
可选功能
该包还包含一个 plone.supermodel 导出/导入处理程序,如果安装了 plone.supermodel,它将被配置。您可以使用 [supermodel] 扩展来添加 plone.supermodel 依赖。
如果安装了 z3c.form,则将安装一个 z3c.form 小部件。如果没有其他操作,则 [widget] 扩展会拉取这个依赖。
如果安装了 plone.rfc822,则将安装一个 plone.rfc822 字段打包器。如果没有其他操作,则 [marshaler] 扩展会拉取这个依赖。
如果安装了 plone.schemaeditor,则将安装一个 plone.schemaeditor 字段工厂。如果没有其他操作,则 editor 扩展会拉取这个依赖。
与 Simple TextArea 一起使用
或者,可以使用 RichText 字段而不带 WYSIWYG 编辑器,输入时显示简单的 TextArea,显示时以 HTML 格式输出。在这个例子中,预期 plone.intelligenttext 转换可用。还预期安装 plone.autoform 和 plone.app.z3cform。
from z3c.form.browser.textarea import TextAreaFieldWidget from plone.autoform.directives import widget class ITest(Interface): bodyText = RichText( title=u"Intelligent text", default_mime_type='text/x-web-intelligent', allowed_mime_types=('text/x-web-intelligent', ), output_mime_type='text/x-html-safe', default=u"Default value" ) widget( 'bodyText', TextAreaFieldWidget, )
输入是简单的文本。在显示时,通过转换渲染 HTML 并显示。要显示未转义的 HTML,输出必须是 'text/x-html-safe'。
进一步阅读
有关字段行为的更多详细信息,请参阅 field.txt,有关 plone.supermodel 处理程序的更多详细信息,请参阅 handler.txt。
问题跟踪器
请通过 Plone 问题跟踪器 报告问题。
支持
可以通过 Plone 的支持渠道 回答问题。
贡献
源代码位于 GitHub 上托管的 Plone 代码存储库。
贡献者请阅读文档 Plone 核心的开发流程
变更日志
3.0.0 (2024-06-26)
破坏性更改
在 getAllowedContentTypes 中删除对 portal_properties 的使用。此代码仍在检查 portal_properties.site_properties.forbidden_contenttypes。[maurits] (#125)
内部
更新配置文件。[plone 开发者] (6e36bcc4)
2.0.1 (2024-01-19)
内部
更新配置文件。[plone 开发者] (55bda5c9)
2.0.0 (2023-03-21)
破坏性更改
放弃 Python 2 支持。[jensens] (#48)
错误修复
依赖于 plone.base 并删除对 Products.CMFPlone 的隐式循环依赖。[jensens] (#48)
内部
更新配置文件。[plone 开发者] (80cf330f)
1.3.7 (2023-02-08)
错误修复
删除对 ZODB3 的依赖,使用 ZODB。为 Plone 6 和更新版本的 Python 添加 troove 类别。[jensens] (#47)
1.3.6 (2021-11-25)
错误修复
修复从 portal_properties 到注册表的 wysiwyg 编辑器设置的使用。[duchenean, gotcha] (#45)
1.3.5 (2020-09-26)
错误修复
修复了对 zope.component.interfaces.ComponentLookupError 的弃用警告。[maurits] (#43)
1.3.4 (2020-04-20)
错误修复
次要打包更新。[#1]
1.3.3 (2020-03-09)
错误修复
Black-en & isort 代码。[thet] (#39)
1.3.2 (2019-09-13)
错误修复
在 Python 2 上检查转换输出是否为实际字符串。[agitator] (#37)
1.3.1 (2019-03-21)
错误修复
修复在转换中检查引用图像时的 Python 3 问题。[petschki] (#34)
初始化 towncrier。[gforcada] (#2548)
1.3.0 (2018-10-31)
新功能
Python 3 修复,需要 plone.rfc822>=2.0b1。[jensens]
添加 getSize 方法以获取 RichTextValue 的大小(以字节为单位)[davisagli]
错误修复
修复 py3 中的 doctests 测试[pbauer]
1.2.12(未发布)
错误修复
当引用图像的 uid 更新时清除转换缓存。这修复了 问题 CMFPLone#2465 [petschki]
1.2.11 (2018-04-08)
错误修复
Python 3 修复[pbauer]
1.2.10 (2018-01-30)
错误修复
导入是 Python3 兼容的[b4oshany]
1.2.9 (2017-07-18)
错误修复
确保新的简单 textarea 模板不会用于 rich text 小部件,而只会用于简单 textarea 小部件。否则在显示时您会看到:RichTextValue 对象。(您是指 .raw 还是 .output?)。修复 问题 22。[maurits]
1.2.8 (2017-02-05)
新功能
启用 RichText 字段与简单的 ITextAreaWidget 一起工作。[jensens]
错误修复
清理:使用更多的 zope.interface 装饰器,添加 utf8 头部,isort 导入,zcml 条件已足够。[jensens]
1.2.7 (2016-08-10)
修复
使用 zope.interface 装饰器。[gforcada]
1.2.6 (2015-05-31)
修复 1.2.5 版本中引入的 RawValueHolder 和 RichTextValue 的负数相等性错误。[jone]
1.2.5 (2015-03-26)
为 RawValueHolder 和 RichTextValue 添加相等性检查 (__eq__);[davisagli]
修复 marshall 解码,始终将原始值解码为 unicode。[datakurre]
删除已弃用的 utils.getSiteEncoding,因为它已被弃用且未在任何地方使用。[thet]
对于 Plone 5,支持从注册表中获取标记控制面板设置,同时仍然支持 Plone < 5 的正常 portal_properties 访问。[thet]
解决了一个有趣的循环导入问题,但由于导入顺序的原因,它并不有效。[thet]
1.2.4 (2014-10-20)
强制启用 WYSIWYG,因此当我们以 'text/plain'(或另一个 MIME 类型)开始时,选择 'text/html' 将导致 TinyMCE 重新启动。[lentinj]
告诉 Products.TinyMCE MIME 类型是什么,这样它就不必自己计算了。[lentinj]
使用 closest_content 在子表单的海洋中导航,以找到我们可以使用 portal_url 的东西。[lentinj]
当原始值不是 unicode 且不是 ascii 时,不要报错。在这种情况下,将其编码为 unicode,然后解码为正确的字符串,头痛欲裂。[eleddy]
国际化。[thomasdesvenain]
1.2.3 (2014-01-27)
当原始值是 None 时,不要报错。在这种情况下,输出一个空的 unicode 字符串。[maurits]
1.2.2 (2013-01-01)
添加对 collective.ckeditor 的支持。[tschorr]
1.2.1 (2012-08-14)
修复与 Zope 2.12 的兼容性。[davisagli]
1.2 (2012-08-14)
如果字段有 max_length,将其传递给 wysiwyg 宏。[davisagli]
在 widget_input.pt 中从内联脚本中确定要使用哪个编辑器的 wysiwyg_support 模板。修复了 collective.ckeditor 的支持。[tschorr, davisagli]
更新 getSite 导入位置。[hannosch]
确保如果指定了字段约束,则对其进行验证。这关闭了 http://code.google.com/p/dexterity/issues/detail?id=200 [davisagli]
修复了对 plone.schemaeditor 的支持问题。[davisagli]
为 RichText 字段支持 max_length 参数。超过 max_length 的输入不通过验证。[davisagli]
向 wysiwyg_support 宏传递一些额外的上下文,以帮助确定字段的 MIME 类型。[davisagli]
将弃用的 getSiteEncoding 更改为硬编码的 utf-8 [tom_gross]
1.1 - 2012-02-20
提供用于与 plone.schemaeditor 一起使用的 RichText 字段模式。仅通过网页编辑暴露 default_mime_type 字段,其词汇表来自 plone.app.vocabularies 中的 AllowedContentTypes 词汇表(可以通过 Plone 的标记控制面板进行调整)。[davisagli]
当引发 TransformError 时记录原始异常。[rochecompaan]
1.0.2 - 2011-11-26
如果没有找到转换路径:现在返回一个空字符串并记录错误消息,而不是向用户显示异常页面。[kleist]
修复当源和目标 MIME 类型相同时发生的无限递归错误。[rochecompaan]
1.0.1 - 2011-09-24
确保如果指定了字段约束,则对其进行验证。这关闭了 http://code.google.com/p/dexterity/issues/detail?id=200 [davisagli]
确保如果没有输入文本,则强制字段验证失败。这关闭了 http://code.google.com/p/dexterity/issues/detail?id=199 [davisagli]
将上下文包装在表单上下文中,而不是站点中,以便正确生成相对链接。[davisagli]
如果表单没有前缀,避免重复 textarea 的 id。[davisagli]
修复了编辑器没有加载的情况,因为正在编辑的上下文是字典。[davisagli]
将z3c.form小部件的rows和cols设置传递给wysiwyg编辑器宏。[davisagli]
1.0 - 2011-04-30
修复失败的测试。[davisagli]
1.0b7 - 2011-02-11
不要持续缓存输出。转换可能依赖于外部状态(例如,uuid转换)。PortalTransform的缓存不完美,但有时间限制。http://code.google.com/p/dexterity/issues/detail?id=151 [elro]
将上下文传递给portal转换。[elro]
1.0b6 - 2010-04-18
修复字段模式,以便在添加字段时使用plone.schemaeditor作为表单模式。[rossp]
删除当前成员编辑偏好的未使用查找。这由wysiwyg_support宏处理。[davisagli]
1.0b5 - 2009-11-17
修复了用户未设置编辑偏好时可能发生的错误。[optilude]
修复Plone 4上的测试。[optilude]
添加用于与plone.schemaeditor一起使用的字段工厂(仅在安装了该包时配置)。[davisagli]
1.0b4 - 2009-10-12
更新README.txt以符合现实。[optilude]
修复了@@text-transform视图,使其能够与路径遍历一起工作。[optilude]
1.0b3 - 2009-10-08
添加plone.rfc822字段marshaller。仅在安装了该包时进行配置。[optilude]
1.0b2 - 2009-09-21
在ZODB中存储原始值,而不是在BLOB中。这避免了有成千上万的小BLOB文件可能带来的潜在问题,这在许多文件系统上不会非常节省空间。[optilude]
使RichTextValue不可变。这大大简化了代码,避免了需要跟踪父对象的需求。[optilude]
1.0b1 - 2009-09-17
初始发布
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
plone_app_textfield-3.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | be4df5fa6a24135ea2dfb80cfa6cdb27e8a8a96bffc73b50f402cef3219843ff |
|
MD5 | 2daf2224ce4145f68c4bd7f0b4e857cd |
|
BLAKE2b-256 | 11cbd1f21dcc6d01b19ce30ad2288c27d8972c7d32e5d3e59ae6f851ddfef496 |
plone.app.textfield-3.0.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a277e19f81619abf02b376f71a9dfea860eac4e74656cdb9aedc38ebe19f09f6 |
|
MD5 | a6070dac12ebc0b6cd95d608af3785c9 |
|
BLAKE2b-256 | f9e5d5c1bd46377b435549723c0225e899cc5aeea30b902e5a9726b6d5c6954a |