将其他文件添加到Trac插件

时间:2015-09-24 07:56:09

标签: plugins trac

我正在为Trac编写一个插件,并希望将一些其他文件(例如css文件)放入我的插件中。

我正在使用egg-link到我的源目录,并从那里加载插件工作,但无法找到css文件。所以我想也许它相对于egg-link的路径进行搜索,但它也没有用。

是否可以将这些文件添加到插件中,还是必须将它们作为字符串放入脚本中?如果可能,在使用egg-link时,在哪个(相对)目录中搜索文件?

1 个答案:

答案 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