Включение изображений в шаблон Genshi/Trac

Я пытаюсь включить некоторые изображения в шаблон Genshi для моего плагина Trac, но он всегда показывает только альтернативный текст, потому что не может найти изображения.

У меня есть следующий (X)HTML-код:

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

Когда я использую этот код с простым html-файлом и открываю его в браузере, изображение отображается правильно, что означает, что и путь, и синтаксис верны.

Но когда я вставляю фрагмент кода в шаблон Genshi и использую его в Trac, изображение не может быть найдено. Однако, когда я просматриваю исходный код HTML в веб-браузере и копирую URL-адреса на новую вкладку браузера, он снова отображается правильно. Это означает, что только сервер не может найти изображение.

Изображения находятся в каталоге внутри файла python-egg, а путь указывает непосредственно на каталог, созданный Trac, который также содержит мои файлы CSS и HTML, оба из которых загружены правильно. Изображения правильно указаны в сценарии установки, который создает яйцо.

Как я должен ссылаться на изображения в документах (X)HTML при их использовании с сервером?
Есть ли особый способ включения изображений в документы Genshi? (Я не нашел ни одного.)


person Raimund Krämer    schedule 11.11.2015    source источник
comment
В Trac вы должны использовать относительные пути для хрома. Чтобы использовать изображение из каталога Environment htdocs, используйте /chrome/site/image.png или см. раздел use доступные переменные шаблона. Для подключаемого модуля необходимо реализовать ITemplateProvider.   -  person RjOllos    schedule 12.11.2015
comment
Вы имеете в виду, что для плагина я должен реализовать ITemplateProvider вместо использования класса chrome или дополнительно? У меня уже есть компонент, реализующий поставщика ITemplate, и путь, который он возвращает, правильный. Должен ли я сам вызвать get_htdocs_dirs(), или есть способ получить доступ к htdocs, позволив Trac вызвать метод get_htdocs_dirs()?   -  person Raimund Krämer    schedule 12.11.2015
comment
Я вас неправильно понял, я думал, вы имели в виду класс хрома. Теперь, используя правильный путь, он работает. Я напишу ответ ниже, чтобы объяснить, что я сделал.   -  person Raimund Krämer    schedule 12.11.2015


Ответы (1)


Благодаря комментарию RjOllos и этого сайта я смог исправить это, попробовав все типы URL. Хотя написано, что плагин должен быть /chrome/<pluginname>, на самом деле работал только /chrome. См. изменение ниже! Таким образом, полный URL будет <ip>:<port>/chrome/path/to/image.png.

EDIT: я обнаружил, что на самом деле использовал версию /chrome/pluginname, просто я не использовал имя своего плагина как «имя плагина». Смотрите мой комментарий ниже. Кажется, что /chrome/pluginname на самом деле должно быть /chrome/htdocsnameили что-то в этом роде, если вы используете другое имя, а не имя плагина при реализации ITemplateProvider. В моем случае я назвал его images, что совпадало с названием папки. КОНЕЦ РЕДАКТИРОВАНИЯ

Еще одна ошибка, которую я допустил, заключалась в том, что я забыл начальную косую черту (chrome/path/to/image.png), из-за чего Trac собирал URL-адрес в <ip>:<port>/<current page>/chrome/path/to/image.png.

person Raimund Krämer    schedule 12.11.2015
comment
/chrome/<pluginname> необходим, потому что <pluginname> обычно возвращается как первая запись кортежа, возвращаемого реализацией ITemplateProvider.get_htdocs_dirs. Реализовали ли вы ITemplateProvider в своем подключаемом модуле? - person RjOllos; 12.11.2015
comment
Да. И использование имени плагина в URL-адресе вызвало ошибку, в которой говорилось, что файл не может быть найден. - person Raimund Krämer; 12.11.2015
comment
Мне нужно увидеть ваш код, чтобы определить, в чем проблема. NoteBoxMacro — это простой пример, см. macro.py и настройки. ру. - person RjOllos; 12.11.2015
comment
Я нашел проблему. У меня не было имени плагина в качестве первого элемента кортежа в методе get_htdoc_dirs(), а вместо этого было «images», потому что я думал, что было бы удобно возвращать «images» для изображений и «css» для файлов css. Затем в шаблоне я добавил к пути «изображения», потому что думал, что должен указать путь относительно папки htdocs. Так что это было просто совпадение, что я использовал строку «images» в обоих случаях. Поэтому вместо /chrome я фактически использовал /chrome/pluginname, просто это pluginname не было названием моего плагина. - person Raimund Krämer; 13.11.2015