我正在为Trac编写一个插件,并希望将一些其他文件(例如css文件)放入我的插件中。
我正在使用egg-link到我的源目录,并从那里加载插件工作,但无法找到css文件。所以我想也许它相对于egg-link的路径进行搜索,但它也没有用。
是否可以将这些文件添加到插件中,还是必须将它们作为字符串放入脚本中?如果可能,在使用egg-link时,在哪个(相对)目录中搜索文件?
答案 0 :(得分:1)
使用ITemplateProvider提供静态资源。假设您有一个典型的目录结构,如下所示:
codereviewplugin
codereview
htdocs
css
codereview.css
在您的某个插件的Component
类中,在这种情况下,它可能会在模块CodeReviewModule
中命名为web_ui.py
,您可以使用以下代码实现ITemplateProvider
def get_htdocs_dirs(self):
from pkg_resources import resource_filename
return [('codereview', resource_filename(__name__, 'htdocs')]
然后,您可以使用调用add_stylesheet('codereview/css/codereview.css')
将CSS文件添加到模板。
您还必须在setup.py
中注册文件,否则在以可编辑模式(egg-link)安装鸡蛋时可能会有效,但在正常的鸡蛋安装中则不行:
packages=['codereview'],
package_data = {'codereview': ['htdocs/css/*.css'}
Trac核心中有很多例子,例如Chrome。