Google App Engine static pages Python 2.5 directories etc
Question: I am new at this and am planning to move my stuff from a paid web service to
GAE (nothing dynamic just static pages). Believe me I have spent countless
hours trying to make this work but am at an impasse whereby I achieve one
result at the exclusion of another and visa versa.

I am sure it is a simple answer and that I am violating some basic principles.
What I want is that the app engine page (mygaeid.appspot.com) delivers a
static landing page such that other pages are available with the addition of a
suffix e.g. mygaeid.appspot.com/oranges.html mygaeid.appspot.com/grapes.html
etc.

I am unable to achieve this such that I either am able to get the other pages
when I add the suffix e.g. mygaeid.appspot.com/apples.html;
mygaeid.appspot.com/oranges.html but not the landing page OR with a slightly
different yaml the landing page (mygaeid.appspot.com) works but there is no
access to the other pages (mygaeid.appspot.com/oranges.html etc) that have a
suffix.

The py file (abcdefg.py) is below and is common to the two different yamls
that follow:

    
    
    import os
    from google.appengine.ext import webapp
    from google.appengine.ext.webapp import util
    from google.appengine.ext.webapp import template
    
    class MainHandler(webapp.RequestHandler):
      def get (self, q):
        if q is None:
          q = 'htmdir/apples.html'
    
        path = os.path.join (os.path.dirname (__file__), q)
        self.response.headers ['Content-Type'] = 'text/html'
        self.response.out.write (template.render (path, {}))
    
    
    def main ():
      application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)], debug=True)
      util.run_wsgi_app (application)
    
    if __name__ == '__main__':
      main ()
    

* * *

Using the following yaml the landing page (mygaeid.appspot.com) works
perfectly (delivering the content of apples.html), but I cannot access the
page if I add a suffix e.g. mygaeid.appspot.com/apples.html or
mygaeid.appspot.com/static/htmdir/apples.html etc, as soon as I add the suffix
it does not work. In the directory (htmdir) I have placed apples.html along
with other html pages e.g. oranges.html etc and I cannot access any of them
with this yaml.

    
    
    application: mygaeid
    version: 1
    runtime: python
    api_version: 1
    
    handlers:
    - url: /(.*\.(html))
      static_files: static/htmdir/\1
      upload: static/htmdir/(.*\.(html))
    
    - url: /css
      static_dir: css
    
    - url: /js
      static_dir: js
    
    - url: /images
      static_dir: images
    
    - url: .*
      script: abcdefg.py
    

If I modify the yaml as follows then the landing page (mygaeid.appspot.com)
does not work but when I add the suffixes then it works perfectly e.g.
mygaeid.appspot.com/apples.html; mygaeid.appspot.com/oranges.html etc deliver
the appropriate pages:

    
    
    - url: /(.*\.(html))
      static_files: htmdir/\1
      upload: htmdir/(.*\.(html))
    

Finally if I dispense with the directories altogether and using the same
abcdefg.py (without the directory) the following very simple yaml actually
delivers the results I want but is very unruly as all the files are stuffed in
the root directory.

    
    
    application: mygaeid
    version: 1
    runtime: python
    api_version: 1
    
    handlers:
    - url: /(.*\.(png|js|css))
      static_files: \1
      upload: (.*\.(png|js|css))
    
    - url: .*
      script: abcedfg.py
    

any help would be much appreciated on figuring this out. thanks

* * *

thanks wooble and thanks dave I went back yet again and carefully read the
logs Wooble's solution works but I needed to put the htmdir (that contains the
html) inside a directory called static. GAE is a great (and free) solution for
static websites

your help and feedback is very much appreciated

    
    
    SiteDirectory
    -mygaeid
      -static
        -htmdir
      -js
      -css
      -images
     app.yaml
     index.yaml
    (py file was removed)
    


Answer: If you declare files as static in app.yaml, they are not available to your
application's handlers.

However, if they're really static, using the django template engine to
"render" them is kind of silly; just add mappings in app.yaml to display the
static files, including one to display apples.html for /:

    
    
    application: mygaeid
    version: 1
    runtime: python
    api_version: 1
    
    handlers:
    - url: /(.*\.html)
      static_files: static/htmdir/\1
      upload: static/htmdir/.*\.html
    
    - url: /css
      static_dir: css
    
    - url: /js
      static_dir: js
    
    - url: /images
      static_dir: images
    
    - url: /
      static_files: static/htmdir/apples.html
      upload: static/htmdir/apples\.html
    

(no python files needed)

