gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:53:28 25 4
gpt4 key购买 nike

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

如何使传递给 setText() 的 HTML 理解指向当前站点的链接?

最佳答案

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

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

这会返回值untouched,然后你可以修改文本并保存。

注意:

By default plone is using the UID to handle internal links (check linkintegrity feature), so you probably not get a relative path from the raw getter, but a ../resolveuid/$(UID) like 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,存储它们,然后您就完成了。

关于plone - 如何使用 Plone 的 setText() 在 ATDocument 中设置相对 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34276854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com