2015-11-11 43 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