Python 2.7 如何自定义TRAC插件模板python文件

Python 2.7 如何自定义TRAC插件模板python文件,python-2.7,plugins,trac,python-egg-cache,Python 2.7,Plugins,Trac,Python Egg Cache,我目前正在将我们的TRAC实例修改为Bootstrap 3.1。但是,需要对.py文件进行一些模板化。我只知道如何自定义.html文件。。。只需添加类,稍微定制一下DOM结构,然后将其放入TRAC实例的templates文件夹中 现在如何从插件定制.py文件?我试着把它们放在templates文件夹中,但什么也没发生 我没有使用Python的经验,但很容易就可以随意修改并添加一个引导类,例如在milestone.py的标签中添加col-sm-2控件标签 def __edit_projec

我目前正在将我们的TRAC实例修改为Bootstrap 3.1。但是,需要对.py文件进行一些模板化。我只知道如何自定义.html文件。。。只需添加类,稍微定制一下DOM结构,然后将其放入TRAC实例的templates文件夹中

现在如何从插件定制.py文件?我试着把它们放在templates文件夹中,但什么也没发生

我没有使用Python的经验,但很容易就可以随意修改并添加一个引导类,例如在milestone.py的标签中添加col-sm-2控件标签

    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")

重新编译插件对我来说很有用。在特定的.py文件上添加引导类后,以下是我执行的步骤/命令:

在我正在编辑的插件的特定setup.py所在的TRAC环境插件目录中,构建.egg文件,例如

tracproject/plugins_source/sampleplugin: python setup.py bdist_egg
然后我在plugins目录中重命名了插件的原始.egg文件,例如

tracproject/plugins/sampleplugin/: mv sampleplugin.egg sampleplugin.egg.old
之后,我将新生成的.egg文件复制到plugins目录,例如

tracproject/plugins_source/sampleplugin/dist: mv sampleplugin.egg ../../../plugins/
最后,我重新启动了我们的服务器,例如,在某些情况下,不需要重新启动,因为更改会立即反映出来

sudo service apache2 restart
谢谢@falkb!我知道你是SimpleMultiProject插件的作者,我想把引导类放进去

这里是simplemultiprojectplugin milestone.py的一个片段,我在其中添加了样式

    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")

在投票否决这个问题之前,你能解释一下吗?我找不到关于如何定制插件的相关文章。。。这就是为什么我在这里问这个问题的原因。第一个问题是:你想实现什么。只是重新排序或重塑,即更改布局?顺便说一句,我不是投反对票的人。@Samuelte只是想在html select标记中添加一个引导类,该标记在.py文件中呈现。一些渲染是在.py文件上进行的。即使我更改了.py文件,也不会发生任何事情。我试图将修改后的.py文件放在我们TRAC实例的plugins目录或templates目录中。我甚至试着重新启动我们的网络服务器。。。什么也没发生。我没有Python开发的经验。。。我正在搜索是否可以重新编译插件。。。但是我找不到相关的文章。。。谢谢@Woppi:您可以通过从Trac的命令行shell调用python.exe setup.py bdist_egg重新编译插件,然后将结果文件复制到目录中的.egg文件。\dist到Trac的插件目录。别忘了重新启动Apache。我不确定这是否是按照您自己的风格进行装饰的正确方式,尽管我在这里无能为力。我也很好奇正确的解决方案到底是什么。不管怎样,我还是帮你把问题再次推到了0。@falkb谢谢!编辑了我的帖子,向您展示了我对您的milestone.py文件所做的操作。这是一个通用补丁还是仅仅是一个黑客攻击?这些类名来自哪里?universal?@falkb只是一个黑客,因为我正试图将整个TRAC实例更改为Twitter Bootstrap 3.1模板,包括SimpleMultiProject之类的插件。类名来自Twitter引导程序:@沃皮,我推荐阅读。即使缺少某种文档,您也可能会发现一些关于如何自定义trac html和css的提示,而无需手动编辑所有py文件。