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