首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Plone的setText()在ATDocument中设置相对URL?

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

Stack Overflow用户
提问于 2015-12-15 05:22:58
回答 2查看 78关注 0票数 3

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

如何才能使传递给setText()的超文本标记语言能够理解指向当前站点的链接?

EN

回答 2

Stack Overflow用户

发布于 2015-12-15 14:52:37

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

代码语言:javascript
复制
>>> item.getRawText()
>>> ...

这将返回值untouched,然后您可以修改文本并保存它。

注意:

默认情况下,

使用UID来处理内部链接(请检查链接完整性功能),因此您可能不会从原始getter中获得相对路径,而是一个类似../resolveuid/$(UID)的url。

编辑:

这可能会帮助你重写链接。

代码语言:javascript
复制
>>> import re
>>> from lxml import html
>>> resolveuid_re = re.compile('^[./]*resolve[Uu]id/([^/]*)/?(.*)$')  # Regex resolving the uid from a path.

从文本中获取所有链接

代码语言:javascript
复制
>>> raw_text = obj.getRawText()
>>> dom = html.fromstring(raw_text)
>>> links = dom.xpath('//a/@href')
>>> links
['resolveuid/fbb9304e48b24a30ac7ba31eb5be2cb6']

获取uid

代码语言:javascript
复制
>>> uid = resolveuid_re.match(links[0]).group(1)
>>> uid
fbb9304e48b24a30ac7ba31eb5be2cb6

现在,您可以找到并替换uid,存储它们,然后就完成了。

票数 5
EN

Stack Overflow用户

发布于 2015-12-15 16:33:32

您也可以避免使用脚本而使用rt.bulkmodify

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34276854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档