我有一个关于拆分main.py文件的问题。
现在,我的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 :(得分:22)
拆分代码与拆分任何Python应用程序的代码没什么不同 - 查找一堆相关代码,将其移动到另一个文件,将其移动到该文件,然后将其导入主处理程序文件。
例如,您可以将Page2代码移至page2.py,将
移至import page2
位于文件的顶部,并将映射更改为从/page2
加载page2.Page2
(在这种情况下,您可能希望重命名这些类...
或者,如Script Handlers中所述,您可以通过编辑app.yaml
文件,让单独的.py文件处理不同的(页面组)页面。
您可以将模板处理代码包装在一个便利函数中并调用它,以减少重复的代码。您可以简化模板值的加载,但是一旦想要渲染,就可以调用类似
的方法。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
移动到您想要的位置。
答案 1 :(得分:2)
在其他.py文件中定义类,并使用“import”在main.py中使用它们。实际上很简单。
答案 2 :(得分:0)
至于将导入分组在一起,我试图将所有与app引擎相关的导入保存到名为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 *