У меня есть вопрос о разделении 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()
Разделение кода ничем не отличается от разделения кода для любого приложения на Python - найдите кучу связанного кода, который вы хотите переместить в другой файл, переместите его в этот файл и импортируйте его в основной файл обработчика.
Например, вы можете переместить код Page2 на страницу 2. py, положить
import page2
вверх вашего файла и изменить отображение, чтобы загрузить /page2
из page2.Page2
(в этом случае вы можете захотеть переименовать эти классы....
Или же вы можете иметь отдельные .py-файлы, обрабатывающие различные (группы) страниц, отредактировав файл app.yaml
, как описано в Script Handlers.
Вы можете обернуть свои шаблоны -работать с кодом в удобной функции и вызывать его, чтобы немного уменьшить количество повторений кода. Вы можете упростить загрузку значений шаблонов, но как только вы захотите отрисовать, вы можете вызвать метод что-то вроде
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
в другой файл и импортировать
его туда, где вы хотите.
Определите свои классы в других .py файлах и используйте "импорт" для их использования в main.py. На самом деле это довольно просто.
для входа, действительно ценю их.
Что касается группировки импорта, я пытался сохранить все импорты, связанные с App-engine, в .py файл под названием ext.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 *