Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>First, I would suggest you have a look at "<a href="http://sites.google.com/site/io/rapid-development-with-python-django-and-google-app-engine" rel="noreferrer">Rapid Development with Python, Django, and Google App Engine</a>"</p> <p>GvR describes a general/standard project layout on page 10 of his <a href="http://sites.google.com/site/io/rapid-development-with-python-django-and-google-app-engine/rapid_development_with_django_gae.pdf?attredirects=0" rel="noreferrer">slide presentation</a>. </p> <p>Here I'll post a slightly modified version of the layout/structure from that page. I pretty much follow this pattern myself. You also mentioned you had trouble with packages. Just make sure each of your sub folders has an __init__.py file. It's ok if its empty.</p> <h2>Boilerplate files</h2> <ul> <li>These hardly vary between projects</li> <li>app.yaml: direct all non-static requests to main.py </li> <li>main.py: initialize app and send it all requests </li> </ul> <h2>Project lay-out</h2> <ul> <li>static/*: static files; served directly by App Engine</li> <li>myapp/*.py: app-specific python code <ul> <li>views.py, models.py, tests.py, __init__.py, and more</li> </ul></li> <li>templates/*.html: templates (or myapp/templates/*.html)</li> </ul> <p>Here are some code examples that may help as well:</p> <h2>main.py</h2> <pre><code>import wsgiref.handlers from google.appengine.ext import webapp from myapp.views import * application = webapp.WSGIApplication([ ('/', IndexHandler), ('/foo', FooHandler) ], debug=True) def main(): wsgiref.handlers.CGIHandler().run(application) </code></pre> <h2>myapp/views.py</h2> <pre><code>import os import datetime import logging import time from google.appengine.api import urlfetch from google.appengine.ext.webapp import template from google.appengine.api import users from google.appengine.ext import webapp from models import * class IndexHandler(webapp.RequestHandler): def get(self): date = "foo" # Do some processing template_values = {'data': data } path = os.path.join(os.path.dirname(__file__) + '/../templates/', 'main.html') self.response.out.write(template.render(path, template_values)) class FooHandler(webapp.RequestHandler): def get(self): #logging.debug("start of handler") </code></pre> <h2>myapp/models.py</h2> <pre><code>from google.appengine.ext import db class SampleModel(db.Model): </code></pre> <p>I think this layout works great for new and relatively small to medium projects. For larger projects I would suggest breaking up the views and models to have their own sub-folders with something like:</p> <h2>Project lay-out</h2> <ul> <li>static/: static files; served directly by App Engine <ul> <li>js/*.js</li> <li>images/*.gif|png|jpg</li> <li>css/*.css</li> </ul></li> <li>myapp/: app structure <ul> <li>models/*.py</li> <li>views/*.py</li> <li>tests/*.py</li> <li>templates/*.html: templates</li> </ul></li> </ul>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload