当前位置:  开发笔记 > 前端 > 正文

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

如何解决《如何使用Plone的setText()在ATDocument中设置相对URL?》经验,为你挑选了1个好方法。

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

如何通过HTML传递以setText()了解当前站点的链接?



1> Mathias..:

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

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

这将返回值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.

从文本中获取所有链接

>>> 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,存储它们,你就完成了.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有