2015-12-14 58 views
3

我正在尝试编写一个脚本来重写Plone ATDocument中的链接。当我拨打getText()并通过调用portal_transforms.convertTo('text/x-html-safe')取消引用所有UID链接时,URL全部被重写为“http://foo/Plone/ ...”(字面上,“foo”,作为域名)。当我用setText()保存文本并尝试在网站中查看它时,“foo”域名仍然存在,并且不会被重写到正确的域。如何使用Plone的setText()在ATDocument中设置相对URL?

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

+0

是不是很清楚,我如何将这些链接最初由。他们是使用uid还是什么的内部链接? –

+1

链接是UID – joeforker

回答

5

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

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

这将返回值untouched,那么你可以修改文本,并将其保存。

注:

默认的Plone使用UID来处理内部链接(检查linkintegrity功能),所以你可能无法得到从原始的吸气相对路径,但../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(S)

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

现在,你可能会发现并更换UID(一个或多个),存储他们就大功告成了。