如何使用Plone的setText()在ATDocument中设置相对URL?

时间:2015-12-14 21:22:58

标签: plone archetypes

我正在尝试编写一个脚本来重写Plone ATDocument中的链接。当我拨打getText()并通过致电portal_transforms.convertTo('text/x-html-safe')取消引用所有UID链接时,网址都被重写为" http://foo/Plone/ ..." (字面意思是" foo",作为域名)。当我使用setText()保存文本并尝试在网站中查看" foo"域名仍在那里,不会重新写入正确的域名。

如何让传递给setText()的HTML了解当前网站的链接?

2 个答案:

答案 0 :(得分:5)

如果要修改文本字段的值,则需要使用字段的raw getter来获取值。

>>> item.getRawText()
>>> ...

返回值untouched,然后您可以修改文本并保存。

注:

  

默认情况下,plone正在使用UID来处理内部链接(检查linkintegrity功能),因此您可能无法从原始getter获取相对路径,而是获得类似url的../resolveuid/$(UID)

编辑:

这可以帮助您重写链接。

>>> import re
>>> from lxml import html
>>> resolveuid_re = re.compile('^[./]*resolve[Uu]id/([^/]*)/?(.*)$')  # Regex resolving the uid from a path.

从文字

获取所有链接
>>> raw_text = obj.getRawText()
>>> dom = html.fromstring(raw_text)
>>> links = dom.xpath('//a/@href')
>>> links
['resolveuid/fbb9304e48b24a30ac7ba31eb5be2cb6']

获取uid(s)

>>> uid = resolveuid_re.match(links[0]).group(1)
>>> uid
fbb9304e48b24a30ac7ba31eb5be2cb6

现在你可以找到并更换uid,存储它们,然后你就完成了。

答案 1 :(得分:4)

您还可以避免使用脚本并使用documentation of quality profile

Best practice of CSS