如何自定义 TRAC 插件模板 python 文件
Posted
技术标签:
【中文标题】如何自定义 TRAC 插件模板 python 文件【英文标题】:How to customize TRAC plugin template python file 【发布时间】:2014-08-30 03:58:25 【问题描述】:我目前正在将我们的 TRAC 实例修改为 Bootstrap 3.1。但是,需要对 .py 文件进行一些模板化。我只知道如何自定义 .html 文件...只需添加类,稍微自定义 DOM 结构,然后将其放入我们的 TRAC 实例的模板文件夹中。
现在如何从插件自定义 .py 文件?我尝试将它们放在模板文件夹中,但没有任何反应。
我没有使用 Python 的经验,但是很容易破解并添加一个引导类,例如在里程碑.py 的标签中添加“col-sm-2 control-label”
def __edit_project(self, data, req):
milestone = data.get('milestone').name
all_projects = self.__SmpModel.get_all_projects_filtered_by_conditions(req)
id_project_milestone = self.__SmpModel.get_id_project_milestone(milestone)
if id_project_milestone != None:
id_project_selected = id_project_milestone[0]
else:
id_project_selected = None
return tag.div(
tag.label(
class_="col-sm-2 control-label",
'Project',
tag.br(),
tag.select(
tag.option(),
[tag.option(row[1], selected=(id_project_selected == row[0] or None), value=row[0]) for row in sorted(all_projects, key=itemgetter(1))],
name="project")
),
class_="field")
【问题讨论】:
您能在否决这个问题之前解释一下吗?我找不到有关如何自定义插件的相关文章...这就是为什么我最终在 SO 中询问它的原因。 第一个回调问题是:你想完成什么。只是重新设计或重塑(即改变布局)? 顺便说一句,我不是投反对票的人。 @SamuelTee 只想在 .py 文件中呈现的 html 选择标签中添加一个引导类。一些渲染是在 .py 文件上进行的。即使我更改了 .py 文件,也没有发生任何事情。我试图将修改后的 .py 文件放在我们的 TRAC 实例的插件目录或模板目录中。我什至尝试重新启动我们的网络服务器......什么也没发生。我没有Python开发经验...我正在寻找是否可以重新编译插件...但是我找不到相关文章...谢谢! @Woppi:您可以通过从 Trac 的命令行 shell 调用 python.exe setup.py bdist_egg 重新编译插件,然后复制结果文件(一个 .egg 文件在目录 .\dist) 到 Trac 的插件目录。毕竟不要忘记重新启动Apache。 【参考方案1】:再次编译插件对我有用。在特定 .py 文件上添加引导类后,以下是我执行的步骤/命令:
在我正在编辑的插件的特定 setup.py 所在的 TRAC 环境插件目录中,构建 .egg 文件,例如
tracproject/plugins_source/sampleplugin: python setup.py bdist_egg
然后我在插件目录中重命名了插件的原始.egg文件,例如
tracproject/plugins/sampleplugin/: mv sampleplugin.egg sampleplugin.egg.old
之后,我将新生成的.egg文件复制到plugins目录e.g中
tracproject/plugins_source/sampleplugin/dist: mv sampleplugin.egg ../../../plugins/
最后,我重新启动了我们的服务器,例如(但是,在某些情况下,不需要重新启动,因为更改会立即反映)
sudo service apache2 restart
感谢@falkb!我看到你是我试图放置引导类的 SimpleMultiProject 插件的作者。 :)
这是 simplemultiprojectplugin 里程碑.py 的 sn-p,我在其中添加了样式
def __edit_project(self, data, req):
milestone = data.get('milestone').name
all_projects = self.__SmpModel.get_all_projects_filtered_by_conditions(req)
id_project_milestone = self.__SmpModel.get_id_project_milestone(milestone)
if id_project_milestone != None:
id_project_selected = id_project_milestone[0]
else:
id_project_selected = None
return tag.div(
tag.label('Project', class_="control-label col-sm-2"),
tag.div(
tag.select(
tag.option(),
[tag.option(row[1], selected=(id_project_selected == row[0] or None), value=row[0]) for row in sorted(all_projects, key=itemgetter(1))],
name="project",
class_="form-control"),
class_="col-sm-5"),
class_="form-group")
【讨论】:
我不确定这是否是根据您自己的风格进行装饰的正确方法,尽管我在这里帮不上忙。我也很好奇正确的解决方案实际上是什么。不管怎样,我帮你把你的问题再次推到了 0。 @falkb 谢谢!编辑了我的帖子,向您展示我对您的里程碑.py 文件所做的操作。 这是一个通用补丁还是只是一个 hack?这些类名是哪里来的,是通用的吗? @falkb 只是一个 hack,因为我试图将我们的整个 TRAC 实例更改为 Twitter Bootstrap 3.1 模板,包括 SimpleMultiProject 等插件。类名来自 Twitter Bootstrap。 :) @Woppi 我推荐阅读trac.edgewall.org/wiki/…。即使缺少某种文档,您也可以找到一些关于如何自定义 trac(html 和 css)的提示,而无需手动编辑所有 py 文件。以上是关于如何自定义 TRAC 插件模板 python 文件的主要内容,如果未能解决你的问题,请参考以下文章