有多个 Trac 项目时的相对路径

Relative paths when having multiple Trac projects

我写了一个插件,其中 link 插件的 htdocs 文件夹中的一些图像。为此,我使用路径 /chrome/pluginname/...。当我在安装了多个项目的另一台服务器上测试插件时(在我的开发计算机上我只有一个 Trac 项目),它没有工作,因为项目名称是 URL 的一部分,但是htdocs 路径附加在端口之后。

以下 URLs 在各自的服务器上工作以查找图像文件:

在我的开发计算机上: <ip>:<port>/chrome/pluginname/...

在 Apache 测试服务器上: <ip>:<port>/projectname/chrome/pluginname/...

/chrome/pluginname/... 附加在端口之后,而不是在项目名称之后,因此找不到文件。结果 URL 是 <ip>:<port>/chrome/pluginname/...,就像在我的开发电脑上一样。

如何在 URL 中动态包含项目名称以避免对其进行硬编码,或者使相对 /chrome/pluginname/... 路径在项目名称之后开始?

在 Python 代码中,使用 req.href.chrome('pluginname/...') 生成 URL。在模板代码中,使用 ${href.chrome('pluginname/...')}.

如果您需要提供动态生成的 CSS,您有几个选择。如果您正在编写自己的页面,您可以将 CSS 放在 HTML 页面的 <style> 块中,使用 CSS 中的 Genshi 变量。如果您试图修改 Trac 中存在的页面样式,它会变得更加复杂。我见过的最好的方法是实现 IRequestHandler 来满足对样式表的请求。您可以在 WikiExtrasPlugin. See changeset 14311 and ticket #11041.

中看到它的实现