grok组件包括资源。
megrok.resourceviewlet的Python项目详细描述
megrok.resourceviewlet是一个包含资源的包 使用图层、上下文和视图区分。
设置
导入并初始化必要的工作环境:
>>> import grokcore.component as grok >>> from grokcore import view, viewlet >>> from zope.app.wsgi.testlayer import Browser >>> browser = Browser() >>> browser.handleErrors = False
库
我们首先声明一个资源。我们会将其包含在我们的页面中:
>>> from fanstatic import Resource, Library >>> myLibrary = Library('test_library', 'ftests/resources') >>> Thing = Resource(myLibrary, 'thing.js')
此步骤由入口点完成。对于测试,我们手动进行:
>>> from zope.fanstatic.zcml import create_factory >>> from zope.component import getGlobalSiteManager >>> from zope.publisher.interfaces.browser import IBrowserRequest >>> from zope.interface import Interface >>> resource_factory = create_factory(myLibrary) >>> getGlobalSiteManager().registerAdapter( ... resource_factory, (IBrowserRequest,), Interface, myLibrary.name)
部件
为了演示我们的资源viewlet,我们首先需要一个页面 提供。此页包含名为“resources”的内容提供商:
>>> from zope.interface import Interface >>> class Index(view.View): ... view.require("zope.Public") ... view.context(Interface) ... ... template = view.PageTemplate("""<html><head> ... <tal:resources replace='provider:resources' /> ... </head></html>""") >>> grok.testing.grok_component('index', Index) True
经理
我们现在注册一个名为“resources”的内容提供程序。它将是一个 资源管理器。ResourcesManager是一个组件 专用于呈现resourceviewlets:
>>> from megrok.resourceviewlet import ResourcesManager >>> class Resources(ResourcesManager): ... viewlet.context(Interface) >>> grok.testing.grok_component('resources', Resources) True
viewlet
现在,我们注册一个ResourceViewlet,包括我们的资源。这个 声明非常简单:
>>> from megrok.resourceviewlet import ResourceViewlet >>> class SomeViewlet(ResourceViewlet): ... viewlet.context(Interface) ... resources = [Thing] >>> grok.testing.grok_component('viewlet', SomeViewlet) True
默认情况下,ResourceViewlet注册为 资源管理器。大多数情况下,一个页面只包含 这些内容提供商。如果不是这样,一定要提供 您自己的viewletmanager指令值。
渲染
呈现我们的页面应该呈现ResourcesManager和 因此,请包括我们的资源:
>>> browser.open('http://localhost/@@index') >>> print browser.contents <html><head> <script type="text/javascript" src="http://localhost/fanstatic/test_library/thing.js"></script> </head></html>
它起作用了!享受吧。
更改日志
0.2(2011-01-18)
- megrok.resourceviewlet现在可以工作,并且依赖于fanstatic。
- 依赖性大大减少。
0.1(2009-12-24)
- 初始版本