2009-12-27 4 views
14

Ich habe eine Frage zum Aufteilen einer main.py-Datei.Google App Engine - Wie teile ich Code in mehrere Dateien auf? (webapp)

gerade jetzt, ich habe alles in meinem main.py. Ich habe keine anderen .py-Dateien. Und ich muss immer lange Codezeilen scrollen, bevor ich den Abschnitt erreiche, den ich bearbeiten möchte.

Wie teile ich es auf? (ich werde mehr als 20 Seiten haben, so dass das main.py wird riesig sein, wenn ich es nicht aufteilen.

PS: auch, bemerkte ich, dass ich die Vorlage Werte einrichten musste , Vorlagenpfad, und rufen template.render jedes Mal Jeder Weg, um sie alle zu verkürzen

Code:.?

# everything here in main.py 
class MainPage(webapp.RequestHandler): 
    def get(self): 
     # Models are queried here, results transferred to template_values 

     template_values = { 
      'value1': value1, 
      'value2': value2, 
      'value3': value3, 
      } 

     path = os.path.join(os.path.dirname(__file__), 'index.html') 
     self.response.out.write(template.render(path, template_values)) 

class Page2(webapp.RequestHandler): 
    def get(self): 
     # Models are queried here, results transferred to template_values 

     template_values = { 
      'value1': value1, 
      'value2': value2, 
      'value3': value3, 
      } 

     path = os.path.join(os.path.dirname(__file__), 'index.html') 
     self.response.out.write(template.render(path, template_values)) 

class Page3(webapp.RequestHandler): 
    def get(self): 
     # Models are queried here, results transferred to template_values 

     template_values = { 
      'value1': value1, 
      'value2': value2, 
      'value3': value3, 
      } 

     path = os.path.join(os.path.dirname(__file__), 'index.html') 
     self.response.out.write(template.render(path, template_values)) 


application = webapp.WSGIApplication(
            [('/', MainPage), 
             ('/page2', Page2) 
             ('/page3', Page3)], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 
+0

bewegen http neuen bekommen und halten Beiträge ist meine Strategie seit Beiträge meisten crucials sind und bereits arbeiten. –

Antwort

22

Teilen des Codes ist kein Unterschied Als Code für jede Python-App zu teilen - finde einen Haufen verwandter Code, den du in eine andere Datei verschieben willst, verschiebe ihn in diese Datei und importiere ihn in die Haupthandler-Datei.

Zum Beispiel könnten Sie den Code Page2 bewegen page2.py, setzen

import page2 

am Anfang der Datei, und Ihre Mapping ändern /page2 von page2.Page2 zu laden (möchten Sie vielleicht diese Klassen umbenennen in diesem Fall ...

Alternativ können Sie separate Py Dateien verarbeiten verschiedene (-gruppen) Seiten durch Editieren der Datei app.yaml wie in Script Handlers beschrieben.

Sie können Ihren Code zur Bearbeitung von Vorlagen in eine Komfortfunktion einfügen und ihn aufrufen, um den Code ein wenig zu reduzieren. Sie können das Laden der Vorlage Werte der Lage sein, zu rationalisieren, aber wenn Sie machen möchten, können Sie eine Methode so etwas wie

def render(template_file, template_values): 
    path = os.path.join(os.path.dirname(__file__), template_file) 
    self.response.out.write(template.render(path, template_values)) 

Es ist rufen nicht viel von einem Einsparungen, aber es ist ein wenig besser lesbar. Wahrscheinlich möchten Sie render in eine andere Datei und import verschieben, wo Sie es wollen.

2

in anderen Py Dateien definieren sie Ihre Klassen und verwenden sie „Import“, um sie zu verwenden in Ihrem main.py.Es ist eigentlich ganz einfach.

0

thx für den Eingang, wirklich schätzen sie.

wie für Importe zusammen Gruppierung, habe ich versucht, all App-Motor Einfuhren in eine ext.py

Dann rief Py-Datei mit Bezug zu halten ich es genannt überall wollte ich es durch diese Linie verwenden:

from ext import * 

ext.py enthält die folgenden:

import os 

# import from appengine's libs 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 
from google.appengine.ext.webapp import template 
from google.appengine.ext import db 

# import models 
from models import * 
+0

Ich bemerkte, dass ich, als ich die Page2-Klasse von main.py getrennt hatte, immer noch die appengine-Bibliotheken am Anfang der page2.py-Datei importieren musste. Es ist irgendwie überflüssig. Irgendwelche Vorschläge? – fooyee

+0

Dies sollte wahrscheinlich eine separate Frage sein, da wir wirklich eine Menge Informationen in diesem jetzt packen, aber ... Eine Antwort wäre, Variablen in ext zu erstellen, die Ihre Importe spiegeln. Die Formatierung ist hier schlecht, aber so etwas wie: 'import google.appengine.ext.webapp; webapp = google.appengine.ext.webapp' Dann, wenn Ihre anderen Module ext importieren, können sie sich auf ext.webapp beziehen (oder verwenden Sie das 'from ext import', um nur über webapp zu sprechen). –