将附加文件添加到 Trac 插件

Adding additional files to a Trac plugin

我正在为 Trac 编写一个插件,并想将一些额外的文件(例如 css 个文件)放入我的插件中。

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

是否可以将这些文件添加到插件中,还是必须将它们作为字符串放入脚本中?如果可能的话,它在使用 egg-link?

时在哪个(相对)目录中搜索文件

使用 ITemplateProvider 提供静态资源。假设您有一个典型的目录结构,如下所示:

  • codereviewplugin
    • codereview
      • htdocs
        • css
          • codereview.css

在您的一个插件 Component 类 中,在本例中它可能在模块 web_ui.py 中被命名为 CodeReviewModule,您将实现 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)下安装egg时它可能会起作用,但在正常的egg安装中不起作用:

packages=['codereview'],
package_data = {'codereview': ['htdocs/css/*.css'}

Trac核心中有很多例子,比如Chrome.