我正在尝试编写一个脚本来重写Plone ATDocument中的链接.当我getText()通过调用portal_transforms.convertTo('text/x-html-safe')URL 调用和取消引用所有UID链接都被重写为" http:// foo/Plone / ..."(字面意思是"foo",作为域名).当我保存文本setText()并尝试在站点中查看时,"foo"域名仍然存在,并且不会重新写入正确的域.
如何通过HTML传递以setText()了解当前站点的链接?
如果要修改文本字段的值,则需要使用raw字段的getter 获取值.
>>> item.getRawText()
>>> ...
Run Code Online (Sandbox Code Playgroud)
这将返回值untouched,然后您可以修改文本并保存.
注意:
默认情况下,plone使用UID来处理内部链接(检查链接完整性功能),因此您可能无法获得原始getter的相对路径,而是
../resolveuid/$(UID)类似URL.
编辑:
这可以帮助您重写链接.
>>> import re
>>> from lxml import html
>>> resolveuid_re = re.compile('^[./]*resolve[Uu]id/([^/]*)/?(.*)$') # Regex resolving the uid from a path.
Run Code Online (Sandbox Code Playgroud)
从文本中获取所有链接
>>> raw_text = obj.getRawText()
>>> dom = html.fromstring(raw_text)
>>> links = dom.xpath('//a/@href')
>>> links
['resolveuid/fbb9304e48b24a30ac7ba31eb5be2cb6']
Run Code Online (Sandbox Code Playgroud)
得到uid(s)
>>> uid = resolveuid_re.match(links[0]).group(1)
>>> uid
fbb9304e48b24a30ac7ba31eb5be2cb6
Run Code Online (Sandbox Code Playgroud)
现在你可以找到并更换uid,存储它们,你就完成了.