[[\
  import urllib, os.path
  # The child variable is automatically injected into a parent template's context.
  # it contains the '_body' key which holds any text generated by the child,
  # as well as any other (string) keys passed as attributes to the spy:parent tag.
  # These may be accessed as child['foo'] or child.foo.
  L = child.get('extracode', []) 
  L.append(('parent template', request.filename()))

  # check the filesystem to see if we're running with the SF cgi file layout
  cwd = os.path.dirname(request.stack()[-1])
  path = os.path.join(cwd, 'dump.spy')
  if os.path.exists(path):
    sf = False
    dump = '/dump.spy'
  else:
    sf = True
    dump = '/cgi-bin/dump.spy'

  # the request stack tracks Spyce code contexts: each time a new context loads,
  # its filename is pushed onto the stack.  [0] is the original page requested;
  # [-1] is the page currently being processed (here, it would be the default
  # site template).
  page_source = urllib.urlencode([('path', request.stack()[0])])
]]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>[[= child.title ]]</title>

    <style type="text/css">
    #spycelogo {
      float: right
    }
    #footer {
      clear:both
    }
    #footer hr {
      margin-top: 10px;
    }
    #footer ul {
        list-style-type: none
    }

    fieldset {
      float: left;
    }

    .simpleform input {
      float: left;
			left: 20 em;
      display: block;
    }
    .simpleform textarea {
      float: left;
			left: 20 em;
      display: block;
    }
    .simpleform label {
      float: left;
      width: 10em;
      display: block;
      clear: both;
      font-weight: bold;
    }

    .radio label  {
      display: block;
      font-size: 18px;
    }
    .radio input {
      float: left;
      margin-right: 1em;
    }

		.validationerror {
		  background-color: #44eeff;
		}
		.validationerror dt {
			font-weight: bold;
			margin-left: 1em;
			margin-top: 0.5em;
		}
		.validationerror dd {
			margin-left: 1em;
			margin-bottom: 0.5em;
		}
    
    </style>
  </head>

  <body>
    <h1>[[= child.title ]]</h1>
    <hr>

    [[= child._body ]]

    <div id="footer">
    <div>&nbsp;</div> [[-- force hr margin to take effect --]]
    <hr>
    <img id="spycelogo" alt="Spyce logo" src="/spyce2.png">

    <ul>
    <li><a href="[[= dump ]]?[[= page_source ]]">Source for this page</a></li>

    <li>
      <ul>
      [[ for mod, path in L:{ ]]
      <li><a href="[[= dump ]]?[[= urllib.urlencode([('path', path)]) ]]">Source for [[= mod ]]</a></li>
      [[ } ]]
      </ul>
    </li>

    [[ if not sf:{ ]] 
    <li><a href="[[= '/'.join(request.uri().split('/')[:-1]) or '/' ]]">Directory listing</a></li>
    [[ } ]]
    </ul>
    </div>

  </body>
</html>