2009-12-27 11 views
14

मेरे पास एक main.py फ़ाइल को विभाजित करने के बारे में एक प्रश्न है।Google ऐप इंजन - मैं कोड को एकाधिक फ़ाइलों में कैसे विभाजित करूं? (वेबएप)

अभी, मेरे पास सबकुछ मेरे main.py में है। मेरे पास कोई अन्य .py फाइल नहीं है। और मुझे उस अनुभाग तक पहुंचने से पहले हमेशा कोड की लंबी लाइनों को स्क्रॉल करना होगा, जिसे मैं संपादित करना चाहता हूं।

मैं इसे कैसे विभाजित करूं? (मेरे पास 20 से अधिक पेज होने जा रहे हैं, इसलिए इसका मतलब है कि अगर मैं इसे विभाजित नहीं करता हूं तो main.py बड़ा होगा।

पीएस: भी, मैंने देखा कि मुझे टेम्पलेट मान सेट करना था , टेम्पलेट पथ, और 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 नया करने के लिए मिलता है और रखने के पदों मेरी रणनीति के बाद से पोस्ट सबसे crucials कर रहे हैं और पहले से ही काम करते हैं। –

उत्तर

22

कोड को विभाजित करना कोई भिन्न नहीं है किसी भी पायथन ऐप के लिए विभाजन कोड से अलग - संबंधित कोड का एक गुच्छा ढूंढें जिसे आप किसी अन्य फ़ाइल में ले जाना चाहते हैं, इसे उस फ़ाइल में ले जाएं, और इसे मुख्य हैंडलर फ़ाइल में आयात करें।

उदाहरण के लिए, आप, page2.py के पृष्ठ 2 कोड के लिए कदम अपनी फ़ाइल के शीर्ष पर

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 को एक अलग फ़ाइल में ले जाना चाहते हैं और import जहां आप इसे चाहते हैं। इनपुट के लिए

2

अन्य .py फ़ाइलों में अपनी कक्षाओं परिभाषित करें और उन्हें में उपयोग करने के लिए "आयात" का उपयोग अपने main.py. यह वास्तव में काफी सरल है।

0

thx, वास्तव में उनकी सराहना करते हैं।

:

आयात एक साथ समूहीकरण के लिए के रूप में, मैं सभी एप्लिकेशन इंजन एक .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 * 
+0

मैंने देखा कि जब मैंने main.py से पेज 2 क्लास को अलग किया था, तो मुझे अभी भी पेज 2.py फ़ाइल के शीर्ष पर एपेंगेन libs आयात करना पड़ा था। यह एक प्रकार का अनावश्यक है। कोई सुझाव? – fooyee

+0

यह शायद एक अलग सवाल होना चाहिए, क्योंकि हम वास्तव में इस में बहुत सारी जानकारी पैक कर रहे हैं, लेकिन ... एक जवाब आपके आयात को दर्पण करने वाले चर में चर बनाने के लिए होगा। स्वरूपण यहाँ कुछ की तरह बुरा होगा, लेकिन: 'आयात google.appengine.ext.webapp; webapp = google.appengine.ext.webapp' फिर अपने अन्य मॉड्यूल ext आयात करते हैं, वे ext.webapp का उल्लेख कर सकते हैं (या 'ext से import' का उपयोग सिर्फ webapp के बारे में बात करने के लिए)। –

संबंधित मुद्दे