2015-11-11 45 views
0

我想在我的Trac插件的Genshi模板中包含一些图像,但它总是只显示替代文字,因为它找不到图像。在Genshi/Trac模板中包含图像

我有以下(X)的HTML代码:

<div> 
    <img src="file://c:/path/to/image.png" alt="asdf" /> 
</div> 

当我使用此代码与一个简单的HTML文件,并在浏览器中打开,显示正确的图像,这意味着这两个路径和语法是正确的。

但是,当我将代码片段插入Genshi模板并在Trac中使用它时,无法找到图像。但是,当我查看Web浏览器中的HTML源代码并将URL复制到新的浏览器选项卡时,它将再次正确显示。这意味着只有服务器找不到图像。

图像位于python-egg文件内的目录中,路径直接指向由Trac创建的目录,该目录也包含我的CSS和HTML文件,这两个文件都已正确加载。在创建鸡蛋的设置脚本中正确引用了图像。

如何在使用服务器时在(X)HTML文档中引用图像?
在Genshi文档中是否有特殊的方法来包含图像? (我还没找到)

+0

在Trac中,您应该使用相对于铬的路径。要从环境'htdocs'目录中提供图像,请使用'/ chrome/site/image.png',或者参见使用[可用模板变量](http://trac.edgewall.org/browser/tags/trac- 1.0.9/TRAC /模板/ about.html?标记= 38#L33)。对于插件,您应该实现[ITemplateProvider](http://trac.edgewall.org/wiki/TracDev/PluginDevelopment/ExtensionPoints/trac.web.chrome.ITemplateProvider)。 – RjOllos

+0

你的意思是,对于一个插件,我应该实现ITemplateProvider“而不是”使用铬类,或“另外”?我已经有我的组件实现了ITemplate提供程序,并且它返回的路径是正确的。我应该自己调用get_htdocs_dirs()吗,还是有一种方法可以让Trac调用get_htdocs_dirs()方法来访问htdocs? –

+0

我误解了你的意思,我以为你的意思是铬课。现在使用它的正确路径。我会在下面写一个答案来解释我所做的。 –

回答

0

感谢RjOllos和this site的评论,我可以通过尝试所有的URL类型来修复它。虽然它说一个插件是/chrome/<pluginname>,但它实际上只是/chrome的工作。 请参阅下面的编辑!所以完整的URL是<ip>:<port>/chrome/path/to/image.png

编辑:我发现我实际上使用了/chrome/pluginname版本,只是我没有使用我的插件的名称作为“插件名”。看到我下面的评论。看起来/chrome/pluginname实际上应该是/chrome/htdocsname或类似的东西,以防在实现ITemplateProvider时使用不同的名称而不是插件名称。在我的情况下,我称它为images,它与该文件夹名称相同。 END EDIT

另一个错误我发被忘记初始斜线(chrome/path/to/image.png),其引起的Trac到URL组装以<ip>:<port>/<current page>/chrome/path/to/image.png的。

+0

'/ chrome/'是必需的,因为''通常返回为ITemplateProvider.get_htdocs_dirs实现返回的元组的第一个条目。你有没有实现[ITemplateProvider](http://trac.edgewall。org/wiki/TracDev/PluginDevelopment/ExtensionPoints/trac.web.chrome.ITemplateProvider)在你的插件? – RjOllos

+0

是的,我有。并且在URL中使用插件名称会导致出现错误,表示无法找到该文件。 –

+0

我不得不看你的代码来确定问题是什么。 NoteBoxMacro是一个简单的例子,请参阅[macro.py](https://trac-hacks.org/browser/noteboxmacro/trunk/notebox/macro.py?revision=13675&marks=62#L50)和[setup.py] (https://trac-hacks.org/browser/noteboxmacro/trunk/setup.py?revision=13600&marks=17#L13)。 – RjOllos