{
"info": {
"author": "Souheil Chelfouh",
"author_email": "trollfot@gmail.com",
"bugtrack_url": null,
"classifiers": [
"Environment :: Web Environment",
"Framework :: Zope3",
"Intended Audience :: Other Audience",
"Operating System :: OS Independent",
"Programming Language :: Python"
],
"description": "===================\nmegrok.pagetemplate\n===================\n\nIntroduction\n------------\n\n``megrok.pagetemplate`` is a thin Grok layer above ``zope.pagetemplate``\npackage. It allows the developper to register `IPageTemplate` components\nusing grokked components. The syntax is meant to be very simple and\nreadable. ``megrok.pagetemplate`` only provides one component named\nPageTemplate and uses the basic grokcore.view directives : `name`, `view`,\n`context`, `layer`. To make it even simplier and straightforward, it uses\nthe grokcore.view template registry to register the template files\nassociated to the pagetemplate component.\n\n\nGetting started\n---------------\n\nFirst, we import our dependencies::\n\n >>> import grokcore.view as view\n >>> import megrok.pagetemplate as pt\n >>> from grokcore.component.testing import grok, grok_component\n \n\nA complete yet self-explanatory example\n---------------------------------------\n\nTo get started with the code itself, let's explain the concept behind\nthe PageTemplate component. The display is usually handled by the a\ndedicated component: the View. The View is a multi adapter, adapting\nthe context and the request. It provides a rendering method\n(__call__, usually). If we want to customize a View, we need to\nsubclass it or override it. In both case, we end up with a new\nView and some code might have to be duplicated.\n\nThe PageTemplate component allows you to interact at the rendering\nlevel. This new component implements the zope.pagetemplate\nIPageTemplate interface and is registered as a multi adapter, adapting\na View and a Layer (request type). This PageTemplate can be named, for\nmore customization possibilities.\n\nLet's build a concrete example to get into the concept. First, we need a\ncontext. Our usecase will be to provide different renderings for an\nadorable animal : the Mammoth. First, let's create our mammoth and a\nsimple view that displays it::\n\n\n >>> from zope.component import getMultiAdapter\n >>> from zope.pagetemplate.interfaces import IPageTemplate\n\n >>> class Mammoth(view.Context):\n ... \"\"\"A furry pachyderm\n ... \"\"\"\n ... nickname = u\"Grokky\" \n\n\n >>> class MammothView(view.View):\n ... \"\"\"A view that display a mammoth\n ... \"\"\"\n ...\t view.context(Mammoth)\n ...\n ...\t def update(self):\n ...\t self.mammoth_name = u\"My name is %s.\" % self.context.nickname\n ...\n ...\t def render(self):\n ...\t template = getMultiAdapter((self, self.request), IPageTemplate)\n ...\t return template()\n\n >>> grok_component('my_mammoth_view', MammothView)\n True\n\nAs we can see here, the View render method is a call to the\nPageTemplate component. It will render the template found by the\nregistry lookup.\n\n\nTo be complete, here, we'll provide a IPageTemplate component::\n\n >>> class NakedMammoth(pt.PageTemplate):\n ... \"\"\"A mammoth shown in its simpliest apparel\n ... \"\"\"\n ... pt.view(MammothView)\n ... template = view.PageTemplate(\n ... ' I am naked !'\n ... )\n\n >>> grok_component('NakedMammoth', NakedMammoth)\n True\n\nNow that our template is registered, we can try to summon the view and\nto render it::\n\n >>> from zope.publisher.browser import TestRequest\n >>> request = TestRequest()\n >>> mammoth = Mammoth()\n\n >>> mnv = getMultiAdapter((mammoth, request), name=\"mammothview\")\n >>> print mnv()\n My name is Grokky. I am naked !\n \n \nOur Mammoth is rendered as expected. Though, we cannot decently leave\nthis creature naked. It needs some fur to face the harsh temperature\nof the Siberian winter.\n\nIn order to customize our Mammoth rendering, to change it from Naked to\nFurry, we'll create a skin on which we'll register our new 'furry'\ntemplate component::\n\n >>> from zope.publisher.interfaces import browser\n >>> class IFurryLayer(browser.IDefaultBrowserLayer):\n ... \"\"\"A layer for furry animals.\n ... \"\"\"\n >>> furry_request = TestRequest(skin=IFurryLayer)\n\n\n >>> class FurryMammoth(pt.PageTemplate):\n ... \"\"\"A mammoth shown in its simpliest apparel\n ... \"\"\"\n ... pt.view(MammothView)\n ... pt.layer(IFurryLayer)\n ... template = view.PageTemplate(\n ... ' I am all furry !'\n ... )\n\n >>> grok_component('FurryMammoth', FurryMammoth)\n True\n\nOur new template registered, we are now able to test if everything worked\nas intended. Using the new skin, our Mammoth should now be furry::\n\n >>> mfv = getMultiAdapter((mammoth, furry_request), name=\"mammothview\")\n >>> print mfv()\n My name is Grokky. I am all furry !\n \n\nNote - we can query our component with a very convenient function::\n\n >>> print pt.getPageTemplate(mfv, furry_request)\n \n\nAwesome. Our Mammoth is now fully prepared to face the cold. Though,\nlet's make sure the simpliest request strip the animal from its warm\nhairs::\n\n >>> mnv = getMultiAdapter((mammoth, request), name=\"mammothview\")\n >>> print mnv()\n My name is Grokky. I am naked !\n \n\nThat works. Enjoy !\n\n\nChangelog\n=========\n\n0.7 (2011-01-31)\n----------------\n\n* We now use the latest changes in the ``grokcore.view`` package and\n the standalone template grokker, to avoid reimplementing the whole\n mechanism.\n\n* Updated to be used with Grok 1.3+\n\n\n0.6 (2010-11-10)\n----------------\n\n* Tested for the latest grokcore packages.\n\n* Dependencies to ``grokcore.viewlet`` and ``zope.testing`` removed.\n\n\n0.5 (2010-05-27)\n----------------\n\n* Cleaned up the code to respect the strict pep8. Removed unused imports.\n\n* Tested for Grok 1.1\n\n\n0.4.1 (2010-02-22)\n------------------\n\n* The MANIFEST has been updated so the 'templates' folder of the tests\n module is now part of the source release (thus the tests now run\n correctly).\n\n\n0.4 (2010-02-21)\n----------------\n\n* Cleaned up the dependencies, to get rid of all the zope.app\n artifacts.\n\n* Cleaned up the imports and tests.\n\n\n0.3 - Beta3 Release\n-------------------\n\n* Modified tests to import all the directives needed directly from the\n package `megrok.pagetemplate` itself. [trollfot]\n\n* Added a convenient function ``getPageTemplate`` to query the page\n template component.\n\n\n0.2 - Beta2 Release\n-------------------\n\n* `megrok.pagetemplate` has been upgraded to work with the latest\n grokcore.view (1.12.1). Tests has been corrected and CodeView is\n gone. [trollfot]\n\n\n0.1 - Beta1 Release\n-------------------\n\n* Initial release [trollfot]",
"description_content_type": null,
"docs_url": null,
"download_url": "UNKNOWN",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "http://pypi.python.org/pypi/megrok.pagetemplate",
"keywords": "Grok Pagetemplate Zope Layout Dolmen",
"license": "GPL",
"maintainer": null,
"maintainer_email": null,
"name": "megrok.pagetemplate",
"package_url": "https://pypi.org/project/megrok.pagetemplate/",
"platform": "Any",
"project_url": "https://pypi.org/project/megrok.pagetemplate/",
"project_urls": {
"Download": "UNKNOWN",
"Homepage": "http://pypi.python.org/pypi/megrok.pagetemplate"
},
"release_url": "https://pypi.org/project/megrok.pagetemplate/0.7/",
"requires_dist": null,
"requires_python": null,
"summary": "Page template component for Grok, based on zope.pagetemplate",
"version": "0.7"
},
"last_serial": 794649,
"releases": {
"0.1": [
{
"comment_text": "",
"digests": {
"md5": "93bdceff17b5d0d6218e40c7df41e5d9",
"sha256": "d957389120ff402d593a5406d14e7e508c97be2f642671d06d54f6401a2c6c95"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.1-py2.5.egg",
"has_sig": false,
"md5_digest": "93bdceff17b5d0d6218e40c7df41e5d9",
"packagetype": "bdist_egg",
"python_version": "2.5",
"requires_python": null,
"size": 23472,
"upload_time": "2009-09-05T20:03:55",
"url": "https://files.pythonhosted.org/packages/ee/c0/4ea1707318c2bf59a55122dae65106c1f190e790d8b2b8c04e76c633db42/megrok.pagetemplate-0.1-py2.5.egg"
},
{
"comment_text": "",
"digests": {
"md5": "79b9707044a286ced22e4450c2622b71",
"sha256": "169b1499eed605f92393d6572016dfe263827497155c2a615688fa5b103e22c6"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.1.tar.gz",
"has_sig": false,
"md5_digest": "79b9707044a286ced22e4450c2622b71",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7509,
"upload_time": "2009-09-05T20:03:54",
"url": "https://files.pythonhosted.org/packages/fd/69/bcbe3f1b90f1dcd99828dcba5e368d9389e0ad3281c9e2213dd225bf088f/megrok.pagetemplate-0.1.tar.gz"
}
],
"0.2": [
{
"comment_text": "",
"digests": {
"md5": "4b114995198b5b431118bb1335c25e32",
"sha256": "3dbebffd61411ba5c430f69f94a09a4e7757ecbf4c9d51c568f231d18673d584"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.2.tar.gz",
"has_sig": false,
"md5_digest": "4b114995198b5b431118bb1335c25e32",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 9523,
"upload_time": "2009-09-29T17:54:55",
"url": "https://files.pythonhosted.org/packages/94/78/5f283b252f6ac4ef0039a185d652451dd448d1075280645fe29f2ccc7bbc/megrok.pagetemplate-0.2.tar.gz"
}
],
"0.3": [
{
"comment_text": "",
"digests": {
"md5": "c871e6adebcd9561549257d440b1b6d2",
"sha256": "fd58b6dd49b54735ba2b4729525b4e1367149fc558da68ce7b2dd76f23564fb1"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.3.tar.gz",
"has_sig": false,
"md5_digest": "c871e6adebcd9561549257d440b1b6d2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10137,
"upload_time": "2009-10-15T18:10:34",
"url": "https://files.pythonhosted.org/packages/23/cc/0e72c2ea2c8176149545b11f45b4332e69680f064c6ebd0d0f15564eb0a6/megrok.pagetemplate-0.3.tar.gz"
}
],
"0.4": [
{
"comment_text": "",
"digests": {
"md5": "f3f61f98af3c86d2a9788965aa72cb79",
"sha256": "28798d3d9b1303fee814303c4cf36de81bdaa5a18452c7dfcfbdbe8e8d1d7551"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.4.tar.gz",
"has_sig": false,
"md5_digest": "f3f61f98af3c86d2a9788965aa72cb79",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8590,
"upload_time": "2010-02-21T18:57:36",
"url": "https://files.pythonhosted.org/packages/d2/3e/0746cde96d2db01d9eac5441707d1df44b3dc10adb0b5de9f5617bc243a7/megrok.pagetemplate-0.4.tar.gz"
}
],
"0.4.1": [
{
"comment_text": "",
"digests": {
"md5": "c04bafc60369a37eb78f7f7568eeda5d",
"sha256": "e0472d69208e8bd8c1352582e1568a3a1be48d9dd2c948170c836bcb7651b02e"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.4.1.tar.gz",
"has_sig": false,
"md5_digest": "c04bafc60369a37eb78f7f7568eeda5d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8932,
"upload_time": "2010-02-22T18:16:46",
"url": "https://files.pythonhosted.org/packages/b3/b4/ef87c884c148b5e45d4657b8679d68c5853af55ffaeb22515e39b2f24c8d/megrok.pagetemplate-0.4.1.tar.gz"
}
],
"0.5": [
{
"comment_text": "",
"digests": {
"md5": "e949c224b9062772bf747407a6a996aa",
"sha256": "58c5e02a7e75eb1e421ac8f2e3d80b9d2277239c4433a74f41713b0a525dbbcb"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.5.tar.gz",
"has_sig": false,
"md5_digest": "e949c224b9062772bf747407a6a996aa",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8294,
"upload_time": "2010-05-27T12:34:14",
"url": "https://files.pythonhosted.org/packages/4e/e9/3972f45497b9dea0f4af5cf1b99ee2bb697ee1326606bbb866caf2db4829/megrok.pagetemplate-0.5.tar.gz"
}
],
"0.6": [
{
"comment_text": "",
"digests": {
"md5": "7b03530f321a1a81fc302778b3c8a256",
"sha256": "9da75622537dddcb2d57e8a3b403edf6535f6a4137c1c4a0e815d3ced4690d07"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.6.tar.gz",
"has_sig": false,
"md5_digest": "7b03530f321a1a81fc302778b3c8a256",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8260,
"upload_time": "2010-11-10T13:09:08",
"url": "https://files.pythonhosted.org/packages/13/f1/75807a6db9436a1ed9a3b27bcace4868fd8a40e77335f90d2deabee9fe30/megrok.pagetemplate-0.6.tar.gz"
}
],
"0.7": [
{
"comment_text": "",
"digests": {
"md5": "dd867e839622b8fad5c4839d75eca4f8",
"sha256": "2569e1d83b4cf592f722619400c628a87bbf9586ecdc5f4eb3ae662158c9e260"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.7.tar.gz",
"has_sig": false,
"md5_digest": "dd867e839622b8fad5c4839d75eca4f8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8228,
"upload_time": "2011-01-31T15:39:48",
"url": "https://files.pythonhosted.org/packages/e1/76/01ec796321a450a352eef24a1bd4ba878da9e864cd70202820f287af3744/megrok.pagetemplate-0.7.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "dd867e839622b8fad5c4839d75eca4f8",
"sha256": "2569e1d83b4cf592f722619400c628a87bbf9586ecdc5f4eb3ae662158c9e260"
},
"downloads": -1,
"filename": "megrok.pagetemplate-0.7.tar.gz",
"has_sig": false,
"md5_digest": "dd867e839622b8fad5c4839d75eca4f8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8228,
"upload_time": "2011-01-31T15:39:48",
"url": "https://files.pythonhosted.org/packages/e1/76/01ec796321a450a352eef24a1bd4ba878da9e864cd70202820f287af3744/megrok.pagetemplate-0.7.tar.gz"
}
]
}