我正在试着写一个脚本来重写一个Plone ATDocument的链接。当我调用getText()并通过调用portal_transforms.convertTo('text/x-html-safe')取消对所有UID链接的引用时,URL都被重写为"http://foo/Plone/...“(字面意思是"foo",作为域名)。当我用setText()保存文本并试图在站点中查看它时,"foo“域名仍然存在,并且没有被重写到正确的域中。
如何才能使传递给setText()的超文本标记语言能够理解指向当前站点的链接?
发布于 2015-12-15 14:52:37
如果要修改文本字段的值,则需要使用该字段的raw获取方法获取该值。
>>> item.getRawText()
>>> ...这将返回值untouched,然后您可以修改文本并保存它。
注意:
默认情况下,
使用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.从文本中获取所有链接
>>> raw_text = obj.getRawText()
>>> dom = html.fromstring(raw_text)
>>> links = dom.xpath('//a/@href')
>>> links
['resolveuid/fbb9304e48b24a30ac7ba31eb5be2cb6']获取uid
>>> uid = resolveuid_re.match(links[0]).group(1)
>>> uid
fbb9304e48b24a30ac7ba31eb5be2cb6现在,您可以找到并替换uid,存储它们,然后就完成了。
发布于 2015-12-15 16:33:32
https://stackoverflow.com/questions/34276854
复制相似问题