Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros Trac的内联模板扩展宏_Macros_Trac - Fatal编程技术网

Macros Trac的内联模板扩展宏

Macros Trac的内联模板扩展宏,macros,trac,Macros,Trac,IncludeMacro for Trac wiki允许在调用[[Include(PageName)]的页面中包含另一个wiki页面(或其他内容) 我正在寻找一个模板扩展宏/机制,该宏/机制允许我拥有一个模板页面,该页面将包含,例如(这只是一个简单的示例,仅用于说明): 可以通过以下命令将其扩展到wiki页面: [[ExpandTemplate(CommonPageHeader,Title=Page Title,Maintainer=First Last)]] 这将导致“$(标题)”的所有实例

IncludeMacro for Trac wiki允许在调用[[Include(PageName)]的页面中包含另一个wiki页面(或其他内容)

我正在寻找一个模板扩展宏/机制,该宏/机制允许我拥有一个模板页面,该页面将包含,例如(这只是一个简单的示例,仅用于说明):

可以通过以下命令将其扩展到wiki页面:

[[ExpandTemplate(CommonPageHeader,Title=Page Title,Maintainer=First Last)]]
这将导致“$(标题)”的所有实例被替换为“页面标题”,与$(维护者)相同

---2014-09-02编辑---

我希望在Trac 1.0中部署它


有关我最终打算做什么(以及我的研究笔记)的更多详细信息,请访问

我建议查看和。两者都不能提供完整的解决方案,但可以实现部分请求的功能。

对我来说,Trac的神奇之处在于,您可以用比您描述的更少的代码行实现类似的功能:

导入字符串
从trac.wiki导入*
从trac.wiki.macros导入WikiMacroBase
类ExpandTemplateMacro(WikiMacroBase):
def expand_宏(自身、格式化程序、名称、内容、参数):
args,kw=parse_args(内容)
将格式转换为html(self.env、formatter.context、string.Template(WikiPage(self.env、args[0]).text)。安全替换(kw))
我认为这个单文件插件符合您在问题中所描述的。这里有一个更完整的版本(我自己使用的版本的一个轻微变体):

导入字符串
从trac.core导入traceror
从trac.wiki.macros导入WikiMacroBase
从trac.wiki.formatter将格式\u导入到\u html
从trac.wiki.api导入解析参数
从trac.wiki.model导入WikiPage
def resolve_wiki_page_name(wiki、pagename、referer_资源):
推荐人=“”
如果referer\u resource和referer\u resource.realm=='wiki':
referer=referer\u resource.id
如果pagename.startswith(“/”):
pagename=pagename.lstrip(“/”)
elif pagename.StartWith(“./”)或pagename.StartWith(“../”)\
或('.','..')中的页面名:
pagename=wiki.\u解析\u相对\u名称(pagename,Referer)
其他:
pagename=wiki.\u解析\u范围\u名称(pagename,Referer)
返回页面名
类ExpandTemplateMacro(WikiMacroBase):
“”“使用模板参数展开另一个wiki页面。
第一个参数是另一个wiki页面的页面名称。
例子:
{{{
[[ExpandTemplate(CommonPageHeader,Title=页面标题,Maintainer=最后一个)]]
}}}
其中CommonPageHeader模板wiki页面包含:
{{{
=$Title=
这是一个标题为$title的页面。
它由$mainter维护。
}}}
"""
def expand_宏(自身、格式化程序、名称、内容、参数):
args,kw=parse_args(内容)
wiki=formatter.wiki
pagename=解析\u wiki\u页面\u名称(wiki,args[0],formatter.resource),如果args else“”
如果没有(pagename和wiki.has_页面(pagename)和
formatter.perm('WIKI',pagename')中的“WIKI_VIEW”:
raise TRACEROR('未找到wiki页面')
page=WikiPage(self.env,pagename)
expanded=string.Template(page.text).safe_substitute(kw)
返回格式为html(self.env、formatter.context、expanded)


(另一个模糊不清的类似插件是。它不是你想要的,但可能仍然很有趣…

在过去一天左右发布到trac-hacks.org上。

谢谢你的提示。您提到了两个插件,但两个链接都指向同一个。第二个是哪一个?可能是IncludeMacro?用户以前曾报告一起使用过它们,IIRC。@MarcinAKomorowski感谢您的请求。我刚刚添加了正确的第二个链接。@RjOllos,我已经查看了IncludeMacro-它提供了“包含另一个页面的内容”部分,但缺少1)在发布
[[include(…)]]
的页面上下文中的呈现,以及2)传递要在模板中填写的值。@hasienda,感谢您对答案的更新。ParameterizedTemplatePlugin本身很有趣,我也可以使用它,但它用于生成新的静态页面,而不是在呈现wiki页面时动态扩展模板。谢谢。这就是我喜欢Python的原因,我正在学习欣赏Trac在Python中的实现。你提到你已经在使用类似的东西了——它是一个已发布的插件/宏,还是只是在你的设置中使用的东西?我以前没有时间发布它。唯一的区别是添加的模板支持、上下文(包含与包含页面)以及我喜欢自动插入“编辑”链接。另外,我还有第二个变体,它把它包装在一个可折叠的部分。谢谢你发布这个。我建议对宏的一个改进是允许这样的格式:
[[ParameterizedInclude(PageName,ARG\u NAME1=ARG Value,ARG\u NAME2=ARG Value 2,…])
。这允许模板具有
{{ARG_NAME2}}
,从而使它们更具可读性。问题:您的宏是在模板页面的上下文中呈现模板页面的内容,还是在调用模板的页面中呈现模板页面的内容?如果模板调用宏来生成目录,这一点很重要。这不是我的宏,我只是注意到它已发布到trac-hacks.org。关于第一个问题,您可以打开插件的票证。对于第二个问题,我建议只做一些测试。谢谢@RjOllos,非常感谢。
[[ExpandTemplate(CommonPageHeader,Title=Page Title,Maintainer=First Last)]]