zpt宏的更简单定义。
z3c.macro的Python项目详细描述
详细文档
宏
这个包为explicator和 使用适配器注册表处理flexibler宏。
我们先创建一个内容对象,稍后用作视图上下文:
< Buff行情>>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass
>>> content = Content()
我们还为示例模板创建了一个temp dir,稍后将为其定义 测试:
< Buff行情>>>> import os, tempfile >>> temp_dir = tempfile.mkdtemp()
宏模板
我们将宏模板定义为提供imacrotemplate的适配器:
< Buff行情>>>> path = os.path.join(temp_dir, 'navigation.pt') >>> with open(path, 'w') as file: ... _ = file.write(''' ... <metal:block define-macro="navigation"> ... <div tal:content="title">---</div> ... </metal:block> ... ''')
让我们定义宏工厂
< Buff行情>>>> from z3c.macro import interfaces >>> from z3c.macro import zcml >>> navigationMacro = zcml.MacroFactory(path, 'navigation', 'text/html')
并将它们注册为适配器:
< Buff行情>>>> zope.component.provideAdapter( ... navigationMacro, ... (zope.interface.Interface, IBrowserView, IDefaultBrowserLayer), ... interfaces.IMacroTemplate, ... name='navigation')
故事 宏 表达式
宏表达式将查找宏的名称,调用适配器 提供imacrotemplate并使用它们,如果在 宏 表达式。
让我们使用 导航 宏创建页面模板:
< Buff行情>>>> path = os.path.join(temp_dir, 'first.pt') >>> with open(path, 'w') as file: ... _ = file.write(''' ... <html> ... <body> ... <h1>First Page</h1> ... <div class="navi"> ... <tal:block define="title string:My Navigation"> ... <metal:block use-macro="macro:navigation" /> ... </tal:block> ... </div> ... <div class="content"> ... Content here ... </div> ... </body> ... </html> ... ''')
如您所见,我们使用 宏 表达式来简单地查找宏 在此处插入并替换HTML内容的导航 地点:
现在,我们使用此页面模板创建一个视图:
< Buff行情>>>> from zope.publisher.browser import BrowserView >>> class simple(BrowserView): ... def __getitem__(self, name): ... return self.index.macros[name] ... ... def __call__(self, **kwargs): ... return self.index(**kwargs)
>>> from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile >>> def SimpleViewClass(path, name=u''): ... return type( ... "SimpleViewClass", (simple,), ... {'index': ViewPageTemplateFile(path), '__name__': name})
>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass0
>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass1
最后,我们查找视图并渲染它:
< Buff行情>>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass2
>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass3
插槽
我们还可以定义一个宏槽并用给定的内容填充它:
< Buff行情>>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass4
让我们定义宏工厂
< Buff行情>>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass5
并将它们注册为适配器:
< Buff行情>>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass6
让我们使用 加载项 宏创建页面模板:
< Buff行情>>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass7
现在,我们使用此页面模板创建一个视图:
< Buff行情>>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass8
>>> import zope.interface >>> import zope.component >>> from zope.publisher.interfaces.browser import IBrowserView >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer >>> @zope.interface.implementer(zope.interface.Interface) ... class Content(object): ... pass9
最后,我们查找视图并渲染它:
< Buff行情>>>> content = Content()0
清理
< Buff行情>>>> content = Content()1
宏指令
宏指令可用于寄存器宏。看看 解释宏故事表达式的readme.txt。
< Buff行情>啊!首先定义定义宏的模板:
<阻塞率> AAAAAAAAA 23并在 z3c:macro provider 指令中注册宏提供程序:
<阻塞率> 啊!我们需要一个内容对象… <阻塞率> AAAAAH25
我们需要一个视角… <阻塞率> 啊! < DL>
检查是否获得宏模板:
<阻塞率> AAAAAAAAA 28 AAAAAAA 29 次级方案30 啊! 啊!