python - Plone CMS 日历源中的图像损坏

标签 python plone

我们定期在主页的日历提要中显示损坏的图像,http://cnr.foo.edu 。问题似乎是我们将提要拉入主页的脚本前置 http://events.foo.edu到所有图像 URL 上,当相关图像托管在远程服务器而不是日历网络服务器上时,这会导致失败。如何调整脚本,以便在图像 URL 已包含 http 的情况下它不会添加根日历 URL?

这是我需要修改的 python 脚本片段:

<div class="campus-calendar-event">
        <div class="image-left" style="width: 40px;" tal:condition="python: event['Image']">
            <a tal:attributes="href python:'http://events.foo.edu/index.php/calendar/sn/coe.html?event_ID=%s' % event['ID'];
               title python: event['Title']">
               <img tal:condition="python: event['Image']"
                 tal:attributes="src python: 'http://events.foo.edu%s' % event['Image']['URL'];
                                 alt python: event['Title'];
                                 width string:40px " /></a>
        </div>

如果“URL”已经包含“http”(远程服务器的链接),如何添加“if”语句以省略“http://events.foo.edu”部分?感谢您的帮助!

最佳答案

作为权宜之计,这可能会起作用(未经测试 - 我家里没有安装):

<img tal:define="url python: event['Image'] and event['Image']['URL'];"
     tal:condition="python: event['Image']"
     tal:attributes="src python: url if url.startswith('http') else 'http://events.foo.edu%s' % (url,);
                     alt python: event['Title'];
                     width string:40px " /></a>

(请注意,您的代码无法处理没有条目 URLevent['Image'],我的代码也不会。)

不过,使用 urlsplit/urljoin 可能有一个更优雅的解决方案,它将您的 url 分解为协议(protocol)、服务器、路径、查询、片段和您可以从那里重新组装它。

具体来说,我们定义了一个变量 url 来节省我们的打字时间——我们首先必须再次检查 event['Image'] 是否存在。整个标记受执行此操作的 tal:condition 保护,但执行顺序始终为 defineconditionrepeat 内容/替换属性省略;这样您就可以定义一个变量并在条件子句中使用它。我们可以将其命名为 URL,但我通常不会用全大写来命名变量。 python 中的 x 和 y 如果为假则生成 x 的值,如果为真则生成 y 的值,所以在通常情况下,我们将从您的对象中获取 url-ish 字符串。

新的属性子句可能会令人困惑,因为它的括号不足:更详细地说,它是

url if url.startswith('http') else ('http://events.foo.edu%s' % (url,));

所以这是通常的字符串格式。看看 %s 的结尾,我们可能会说 'http://events.foo.edu'+url,但是“不要连接常量和用户数据在一起”触发了我的“这是否是一个可能的命令注入(inject)漏洞”反射。

关于python - Plone CMS 日历源中的图像损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303075/

相关文章:

plone - 使用 z3c.form 进行单元测试 buttonAndHandler

python - 编写等同于返回其输入对象的 Python 函数的 pyo3 函数

plone - 无法激活关于 Plone Dexterity 类型的讨论(文件夹)

python - 解析 IntId

Plone 升级 2.1.3 > 3.0.6 失败并出现目录错误

Plone/Workflow-为什么portal_workflow工具的getStatusOf返回None?

python - 如何在 django 登录页面中添加 otp 身份验证

python - 如何在Python中找到列表中单词最多的句子?

python - 尝试使用本地存储 : Permission Denied 设置 CKAN 文件存储时出错

python - 从只有一个参数集的旧函数生成新函数