如何在Trac中运行自己的Python脚本

0 投票
2 回答
747 浏览
提问于 2025-04-15 22:35

我想自定义项目页面(trac/templates/index.html)。

我想用一个表格来展示更多与项目相关的信息。例如,每个项目的管理员列表和每个项目的构建状态。这些信息都存储在trac的数据库里。

我有点担心默认的模板引擎无法提供这些信息。至少在它的文档中我没有找到有用的内容。

所以我决定写一个Python脚本(在服务器端)来生成这些信息,输出为JSON字符串。我还加入了一段JavaScript代码,通过Ajax从这个Python脚本获取JSON数据。

但是我不知道怎么让trac识别我的Python脚本。

有没有人能帮帮我?

2 个回答

1

Trac扩展API让你可以拦截任意页面并插入新的数据。举个例子,BatchModifyPlugin这个插件可以拦截请求,并在自定义查询页面上添加内容。你可以查看ITemplateStreamFilter的方法,地址是http://trac-hacks.org/browser/batchmodifyplugin/0.11/trunk/batchmod/web_ui.py。想要更多例子的话,可以去Trac Hacks网站看看。

1

我通过在所有trac项目页面的顶部添加一个iframe,以更简单的方式自定义了trac。你可以通过进入trac环境目录中的templates文件夹,然后添加一个site.html文件来实现这个。

我有类似这样的内容:

 <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:py="http://genshi.edgewall.org/" py:strip="">
  <!--! Custom match templates go here -->
  <head py:match="head" py:attrs="select('@*')">
      ${select('*|comment()|text()[local-name()!="script"]')}
      <link rel="stylesheet" type="text/css" href="http://mysite.com/nav.css" />
  </head>

<body py:match="body" py:attrs="select('@*')">
     <iframe src ="http://mysite.com/nav.html"
                 width="100%"
                 id="navbar-iframe"
                 height="30px"
                 frameborder="0"
                 marginheight="0"
                 scrolling="no"
                 marginwidth="0">
             </iframe>
    <div id="tdtracbody">
        ${select('*|text()')}
    </div>
    </body>
</html>

撰写回答