2009-12-27 64 views
14

我有一个关于拆分main.py文件的问题。Google App Engine - 如何将代码拆分为多个文件? (webapp)

现在,我拥有了我的main.py中的所有内容。我没有其他的.py文件。在到达我希望编辑的部分之前,我总是需要滚动很长的代码行。

我该如何分割它?我想要有20多页,这意味着main.py会很大,如果我不分割它。

PS:另外,我注意到我必须设置模板值,模板路径,并调用template.render每次缩短了他们全部的任何方式

代码:?

# 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

移动HTTP GET新的,并保持职位是我的策略,因为职位是最crucials和已经工作。 – 2009-12-28 13:29:07

回答

22

分割代码没有区别不仅仅是为任何Python应用程序分割代码 - 找到一堆相关的代码,您想要移动到另一个文件,将其移动到该文件,并将其导入主处理程序文件。

例如,你可以移动第2页代码page2.py,把

import page2 

在你的文件的顶部,并改变你的映射来加载从page2.Page2/page2(你可能要重新命名这些类在这种情况下...

或者,你可以有独立的.py文件编辑为Script Handlers描述的app.yaml文件处理页面不同(组)。

你可以将你的模板处理代码包装在一个方便的函数中,并调用它,以减少重复代码的次数。您可以简化模板值的加载,但一旦要渲染,你可以调用一个方法类似

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)) 

这不是太大的积蓄,但它是一个有点更具可读性。可能你想将render移动到不同的文件,并且import在你想要的位置。

2

定义在其他.py文件类和使用“导入”,在使用它们的main.py.其实很简单

0

thx为输入,真的很感谢他们。

为分组进口在一起,我试图保持与进口称为ext.py

然后我把它叫做无论我希望通过此行来使用它的.py文件中的所有应用程序引擎:

from ext import * 

ext.py包含以下内容:

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

我注意到,当我从main.py中分离出Page2类时,我仍然需要在page2.py文件的顶部导入appengine库。 这是多余的。有什么建议么? – fooyee 2009-12-28 00:31:33

+0

这应该是一个单独的问题,因为我们现在真的打包了很多信息,但是... 一个答案是在ext中创建镜像导入的变量。这里的格式不好,但是像这样: 'import google.appengine.ext.webapp; webapp = google.appengine.ext.webapp' 然后当你的其他模块导入ext时,它们可以引用ext.webapp(或者使用'from ext import'来谈论webapp)。 – 2009-12-28 04:43:53