<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta name="generator" content= "HTML Tidy for Mac OS X (vers 12 April 2005), see www.w3.org" /> <title>Nevow Examples</title> <link href="cssfile" type="text/css" rel="stylesheet" title= "MainTheme" /> </head> <body> <div id="main"> <h1>Welcome to Nevow</h1> <p>This page contains examples of how to build web applications on top of Nevow, in order of increasing complexity. To get a feel of how to structure your Python code while using Nevow, the source of all examples is linked for easy reference. In order to run each example, you will need Zope Interface, Twisted, and Nevow installed, and then you will need to run the example server.</p> <p>Under <strong>windows</strong>: you need to run the Twisted Shell from Start-->Applications-->Twisted menu. Under a unix like operating system, make sure that the twistd binary is on your PATH. Installing Twisted will do this for you.</p> <p>To run the example server, go to the Nevow examples directory (eg: C:\Nevow\examples or /usr/src/Nevow/examples) and run the following command:</p> <blockquote> twistd -noy examples.tac </blockquote> <p>Then, to view the running examples, point your web browser at: <a class="linkification-ext" href= "http://localhost:8080/">http://localhost:8080/</a></p> <p>Once you are viewing this page as served by the example server, all of the "live" links below will work.</p> <h2>Table of Contents</h2> <ol> <li><a href="#tests">Test Suite</a></li> <li><a href="#examples">Examples</a></li> <li><a href="#taglibrary">Tag Library Examples</a></li> <li><a href="#demoapp">Demo Applications</a></li> </ol> <h1 id="examples">Examples Listing</h1> <ol> <li> <span>A Nevow example that doesn't use any of Nevow automations</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/most_basic/most_basic.py">most_basic.py</a></td> </tr> </tbody> </table>Live examples: <a href= "most_basic/">most_basic</a> </div> </li> <li> <span>Hello world in Nevow</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/hello/hellostan.py">hellostan.py</a></td> </tr> <tr> <td>xmlfile Source</td> <td><a href= "sources/hello/hellohtml.py">hellohtml.py</a></td> </tr> <tr> <td>xmlfile Template</td> <td><a href= "sources/hello/hellohtml.html">hellohtml.html</a></td> </tr> </tbody> </table>Live examples: <a href="hellohtml/">xmlfile</a>, <a href="hellostan/">Stan</a> </div> </li><!-- <li> <span>Hello world in Nevow</span> <div class="source"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><a href="sources/hellostan.py">Stan Source</a></td> <td width="100%"></td> </tr> <tr> <td><a href="b">xmlfile Source</a></td> <td></td> </tr> <tr> <td><a href="c">xmlfile Template</a></td> <td></td> </tr> </table> Live examples: <a href="hellohtml/">xmlfile</a>, <a href="hellostan/">Stan</a></div> </li> --> <li> <span>How to get Session and Request objects from the context</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/simple/simple.py">simple.py</a></td> </tr> <tr> <td>xmlfile Source</td> <td><a href= "sources/simple/simplehtml.py">simplehtml.py</a></td> </tr> <tr> <td>xmlfile Template</td> <td><a href= "sources/simple/simplehtml.html">simplehtml.html</a></td> </tr> </tbody> </table>Live examples: <a href="simplehtml/">xmlfile</a>, <a href="simple/">Stan</a><br /> </div> </li> <li> <span>Render tables in Nevow</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>xmlfile Source</td> <td width="100%"><a href= "sources/table/tablehtml.py">tablehtml.py</a></td> </tr> <tr> <td>xmlfile Template</td> <td><a href= "sources/table/tablehtml.html">tablehtml.html</a></td> </tr> </tbody> </table>Live example: <a href="tablehtml/">tables</a> </div> </li> <li> <span>How to use xmlfile directives</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/disktemplates/disktemplates_stan.py">disktemplates_stan.py</a></td> </tr> <tr> <td>xmlfile Source</td> <td><a href= "sources/disktemplates/disktemplates.py">disktemplates.py</a></td> </tr> <tr> <td>xmlfile Template</td> <td><a href= "sources/disktemplates/disktemplates.html">disktemplates.html</a></td> </tr> </tbody> </table>Live examples: <a href= "disktemplates/">xmlfile</a>, <a href= "disktemplates_stan/">Stan</a> </div> </li> <li> <span>How to handles page children with Nevow, and how to use the <nevow:attr> tag</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/children/children.py">children.py</a></td> </tr> <tr> <td>xmlfile Source</td> <td><a href= "sources/children/childrenhtml.py">childrenhtml.py</a></td> </tr> <tr> <td>xmlfile Templates</td> <td><a href= "sources/children/childrenhtml_RootPage.html">childrenhtml_RootPage.html</a><br /> <a href= "sources/children/childrenhtml_ChildPage.html">childrenhtml_ChildPage.html</a><br /> <a href= "sources/children/childrenhtml_ChildOfChildPage.html"> childrenhtml_ChildOfChildPage.html</a></td> </tr> </tbody> </table>Live examples: <a href="children/">stan</a>, <a href="childrenhtml/">xmlfile</a> </div> </li> <li> <span>Use Fragments to divide a page in logical components</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/fragments/fragments.py">fragments.py</a></td> </tr> <tr> <td>xmlfile Template</td> <td width="100%"><a href= "sources/fragments/main.html">main.html</a></td> </tr> </tbody> </table>Live example: <a href="fragments/">fragments</a> </div> </li> <li> <span>Use Macro directive to compose pages by transforming the docFactory at precompile time</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/macros/macros.py">macros.py</a></td> </tr> <tr> <td>xmlfile Template</td> <td><a href= "sources/macros/main.html">main.html</a><br /> <a href= "sources/macros/root_macro.html">root_macro.html</a><br /> <a href= "sources/macros/child_macro.html">child_macro.html</a><br /> </td> </tr> </tbody> </table>Live example: <a href="macros/">macros</a> </div> </li> <li> <span>Allow data= directives to look inside application objects</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/objcontainer/objcontainer.py">objcontainer.py</a></td> </tr> </tbody> </table>Live example: <a href= "objcontainer/">objcontainer</a> </div> </li> <li> <span>Use nested sequences to render an attribute of type list of an object</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/nestedsequence/nestedsequence.py">nestedsequence.py</a></td> </tr> </tbody> </table>Live example: <a href= "nestedsequence/">nestedsequence</a> </div> </li> <li> <span>Manual form example</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/manualform/manualform.py">manualform.py</a></td> </tr> </tbody> </table>Live example: <a href="manualform/">form</a> </div> </li> <li> <span>Advanced manual form example</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/advanced_manualform/advanced_manualform.py"> advanced_manualform.py</a></td> </tr> </tbody> </table>Live example: <a href= "advanced_manualform/">form</a> </div> </li> <li> <span>Formless example</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/formpost/formpost.py">formpost.py</a></td> </tr> </tbody> </table>Live example: <a href="formpost/">formpost</a> </div> </li> <li> <span>Another formless example, but a little bit more complex</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/formpost/formpost2.py">formpost2.py</a></td> </tr> </tbody> </table>Live example: <a href="formpost2/">formpost2</a> </div> </li> <li> <span><b>[0.5]</b>Using formless to create multi-step wizards by returning Page instances from autocallables</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/tests/testformless.py">tests/testformless.py</a></td> </tr> </tbody> </table>Live example: <a href= "testformless">testformless</a> </div> </li> <li> <span><b>[0.5]</b>Using formless, return a URL instance from an autocallable to redirect to it</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/tests/testformless.py">tests/testformless.py</a></td> </tr> </tbody> </table>Live example: <a href= "formless_redirector">formless_redirector</a> </div> </li> <li> <span>Example of interacting with a database</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source:</td> <td width="100%"><a href= "sources/db/db.py">db.py</a></td> </tr> </tbody> </table>Live examples: <a href="db/">db</a> </div> </li> <li> <span>An example of using HTTP Basic Auth for simple authentication</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/http_auth/http_auth.py">http_auth.py</a></td> </tr> </tbody> </table>Live example: <a href="http_auth/">http_auth</a> </div> </li> <li> <span>Various examples of how to integrate twisted.guard with Nevow for authentication</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/guarded/guarded.py">guarded.py</a></td> </tr> <tr> <td>Stan Source</td> <td><a href= "sources/guarded/guarded2.py">guarded2.py</a></td> </tr> </tbody> </table>Live examples: <a href="guarded/">guarded</a>, <a href="guarded2/">guarded2</a> </div> </li> <li> <span>Examples of how to access the session when a user logs out of guarded sites</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/logout_guard/logout_guard.py">logout_guard.py</a></td> </tr> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/logout_guard/logout_guard2.py">logout_guard2.py</a></td> </tr> </tbody> </table>Live examples: <a href= "logout_guard/">logout_guard</a>, <a href= "logout_guard2/">logout_guard2</a> </div> </li> <li> <span>Use Configurables to render a form with Formless in a customized template</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>xmlfile Source</td> <td width="100%"><a href= "sources/customform/customform.py">customform.py</a></td> </tr> </tbody> </table>Live example: <a href= "customform/">customform</a> </div> </li> <li> <span>Dynamically build your forms</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/formbuilder/formbuilder.py">formbuilder.py</a></td> </tr> </tbody> </table>Live example: <a href= "formbuilder/">formbuilder</a> </div> </li> <li> <span>Adapting an object to the IRenderer interface in order to make it render itself</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/irenderer/simple_irenderer.py">simple_irenderer.py</a></td> </tr> </tbody> </table>Live example: <a href="simple_irenderer/">simple IRenderer</a> </div> </li> <li> <span>More complex example of adapting objects to IRenderer and to different interfaces</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/irenderer/irenderer.py">irenderer.py</a></td> </tr> </tbody> </table>Live example: <a href="irenderer/">IRenderer</a> </div> </li> <li> <span>Handling and building a Tree structure dynamically on yor site</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/tree/tree.py">tree.py</a></td> </tr> </tbody> </table>Live example: <a href="tree/">tree</a> </div> </li> <li> <span>Simple example of text localisation</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/i18n/i18n.py">i18n.py</a></td> </tr> </tbody> </table>Live example: <a href="i18n/">i18n</a> </div> </li> <li> <span>Localisation of disk templates</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td>xmlfile Source</td> <td width="100%"><a href= "sources/i18n/hello.html">hello.html</a></td> </tr> <tr> <td>Python Source</td> <td width="100%"><a href= "sources/i18n/diski18n.py">xmli18n.py</a></td> </tr> </tbody> </table>Live example: <a href="xmli18n/">xmli18n</a> </div> </li> </ol> <h1 id="livepage">LivePage/Canvas/XUL</h1> <ul> <li> <span>TypeAhead: Using asynchronous remote method invocation from JavaScript to complete what the user is typing. </span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td>Python Source</td> <td width="100%"><a href="sources/athenademo/typeahead.py">typeahead.py</a></td> </tr> <tr><td>HTML Template</td> <td><a href= "sources/athenademo/typeahead.html">tablehtml.html</a></td></tr> </tbody> </table>Live example: <a href="typeahead/">typeahead</a> </div> </li> <li> <span>Calculator: A simple server-side calculator. All button presses and calculations are processed at the server.</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td>Python Source</td> <td width="100%"><a href="sources/athenademo/calculator.py">calculator.py</a></td> </tr> <tr> <td>HTML Template</td> <td width="!00%"><a href="sources/athenademo/calculator.html">calculator.html</a></td> </tr> </tbody> </table>Live example: <a href="calculator">calculator</a> </div> </li> <li> <span>Widgets: An example of using Athena Widgets to define custom methods for manipulating particular sections of a page's DOM, as well as communicating in both directions between the client and server.</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td>Python Source</td> <td width="100%"><a href="sources/athenademo/widgets.py">widgets.py</a></td> </tr> <tr> <td>JavaScript Source</td> <td width="100%"><a href="sources/athenademo/widgets.js">widgets.js</a></td> </tr> </tbody> </table>Live example: <a href="widgets">widgets</a> </div> </li> </ul> <h1 id="taglibrary">Tag Library Examples</h1> <ul> <li> <span>How to use the Calendar tag from the taglibrary</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/cal/cal.py">cal.py</a></td> </tr> </tbody> </table>Live example: <a href="calendar/">calendar</a> </div> </li> <li> <span>How to use the Progressbar tag from the taglibrary</span> <div class="source"> <table border="0" cellpadding="0" cellspacing="0" width= "100%"> <tbody> <tr> <td>Stan Source</td> <td width="100%"><a href= "sources/progress/progress.py">progress.py</a></td> </tr> </tbody> </table>Live example: <a href="progress/">progress</a> </div> </li> </ul> <h1 id="demoapp">Demo Applications</h1> <ul> <li> <span>Extremely basic library, made with axiom (redesigned atop)</span> <div class="source"> xmlfile Source: <a href="sources/with_axiom">with_axiom</a> </div> </li> <li> <span>Handling users in a web site</span> <div class="source"> Stan Source: <a href="sources/userdb">userdb</a> </div> </li> <li> <span>Pastebin example with nevow</span> <div class="source"> Source: <a href="sources/pastebin">pastebin</a> </div> </li> <li> <span>Blog engine</span> <div class="source"> Source: <a href="sources/blogengine">blogengine</a> </div> </li> <li> <span>Link storage webservice (uses Twisted's XML-RPC)</span> <div class="source"> Source: <a href="sources/postit">postit</a> </div> </li> <li> <span>Todo list with rails like file structure (requires pgasync 1.3b and postgres)</span> <div class="source"> Source: <a href="sources/todo">todo</a> </div> </li> <li> <span>Image uploader that uses axiom</span> <div class="source"> Source: <a href="sources/image_uploader">imagination</a> </div> </li> </ul> </div> </body> </html>