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):
...     pass
0
>>> 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
1

最后,我们查找视图并渲染它:

< 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
2
>>> 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
3

插槽

我们还可以定义一个宏槽并用给定的内容填充它:

< 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
4

让我们定义宏工厂

< 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
5

并将它们注册为适配器:

< 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
6

让我们使用 加载项 宏创建页面模板:

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

现在,我们使用此页面模板创建一个视图:

< 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
8
>>> 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
9

最后,我们查找视图并渲染它:

< Buff行情>
>>> content = Content()
0

清理

< Buff行情>
>>> content = Content()
1

宏指令

宏指令可用于寄存器宏。看看 解释宏故事表达式的readme.txt。

< Buff行情>啊!

首先定义定义宏的模板:

<阻塞率> AAAAAAAAA 23

并在 z3c:macro provider 指令中注册宏提供程序:

<阻塞率> 啊!

我们需要一个内容对象… <阻塞率> AAAAAH25

我们需要一个视角… <阻塞率> 啊! < DL>

我们需要一个请求:
啊哈

检查是否获得宏模板:

<阻塞率> AAAAAAAAA 28 AAAAAAA 29 次级方案30 啊! 啊!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java找不到当前线程的会话   同步Java同步方法调用非同步方法   这段代码的java时间复杂度是如何列出一个集合的所有子集的?   java Jetty SslConnectionFactory nextProtocol   为什么在java集合中使用游标而不是for循环   java如何对长函数进行单元测试?   如何从java中的文本输入创建数组   java工具栏内容未显示,尽管出现了片段内容   java MediaPlayer无法处理本地文件   java在多次读取时,从TCP服务器读取的数据将挂起   java组织。springframework。数据领域无法将PageImpl强制转换为   java如何使用@WithMockUser并从属性文件中传递用户名和密码?   JavaSpringBootGradle插件2。x如何使用自定义启动器布局工厂   sockets Java客户端和服务器之间使用字符串等进行通信的“行业标准”方法是什么   java变量引用不存在的资源:${project\u loc:project\u name}   搜索如何返回LDAP Java中所有用户的特定属性?   JDK1.8.016x的java密钥斗篷代理问题   spring如何使用Java中的Exchange获取邮件   java Kotlin+Dagger 2:Dagger*文件不会生成   如何在传入的double上执行操作,然后在Java中返回