2012-06-13 10 views
5

मैं जिन्जा 2 के साथ अपना पहला GAE ऐप बनाने की कोशिश कर रहा हूं। एक दर्जन से अधिक छोटी त्रुटियों काबू पाने के बाद, अब मैं इस के साथ अटक कर रहा हूँ:टेम्पलेट नॉटफाउंड: Google App इंजन और Jinja2 के साथ index.html

Traceback (सबसे हाल आखिरी कॉल):

File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1536, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1530, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1102, in __call__ 
    return handler.dispatch() 
    File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 572, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 570, in dispatch 
    return method(*args, **kwargs) 
    File "C:\Users\CG\Documents\udacity\HiMon\main.py", line 31, in get 
    template = jinja_environment.get_template('index.html') 
    File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\environment.py", line 719, in get_template 
    return self._load_template(name, self.make_globals(globals)) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\environment.py", line 693, in _load_template 
    template = self.loader.load(self, name, globals) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\loaders.py", line 115, in load 
    source, filename, uptodate = self.get_source(environment, name) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\loaders.py", line 180, in get_source 
    raise TemplateNotFound(template) 
TemplateNotFound: index.html 
यहाँ

मेरी YAML फ़ाइल:

application: himother 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: yes 

handlers: 
- url: /favicon\.ico 
    static_files: favicon.ico 
    upload: favicon\.ico 

- url: .* 
    script: main.app 

libraries: 
- name: webapp2 
    version: "2.5.1" 
- name: jinja2 
    version: "2.6" 

यहाँ मेरी कोड:

import os 
import webapp2 

import jinja2 

jinja_environment = jinja2.Environment(autoescape=True, 
    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates'))) 

class MainPage(webapp2.RequestHandler): 
    def get(self): 
     template_values = { 
      'name': 'Serendipo', 
      'verb': 'extremely happy' 
     } 

     template = jinja_environment.get_template('index.html') 
     self.response.out.write(template.render(template_values)) 

app = webapp2.WSGIApplication([('/', MainPage)], 
           debug=True) 

यहाँ मेरी .html टेम्पलेट:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Look Ma, I'm using Jinja!</title> 
    </head> 
    <body> 
     Hi there - I'm {{ name }}, and I {{ verb }} programming! 
    </body> 
</html> 

त्रुटि संदेश के बावजूद, मैं एक फ़ोल्डर बुलाया "टेम्पलेट्स" और, एक दायरे, index.html फ़ाइल बनाया:

enter image description here

enter image description here

enter image description here

मैं जिन्जा 2 भी स्थापित किया है।

क्या किसी को इस त्रुटि के कारण का कोई विचार है?

उत्तर

5

आप शायद jinja2 संस्करण webapp2_extras में शामिल है का उपयोग करना चाहिए।

इस सेट अप प्राप्त करने के उदाहरण यहाँ है: http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html#webapp2_extras.jinja2.Jinja2

मुख्य अंतर यह है कि बजाय अपने आप को jinja2.Environment स्थापित करने की है, तो आप क्या करते हैं ...

from webapp2_extras import jinja2 
jinja = jinja2.get_jinja2(app=self.app) 
jinja.render_template("index.html") 

तुम भी संभावना की आवश्यकता होगी

libraries:                  
- name: jinja2                 
    version: "2.6" 
+0

हाय, @jgeewax, मैंने अपने पुस्तकालय अनुभाग में "नाम: जिंज 2 संस्करण: 2.6" शामिल किया (वास्तव में, यह पहले से ही था, मैं इस प्रश्न में चिपकाते समय गलती करता हूं)। मैं आपके द्वारा इंगित लिंक को पढ़ने के जिन्जा 2 संस्करण मुद्दे का अध्ययन करूंगा। – craftApprentice

2

मैन: app.yaml के अपने libraries खंड में jinja2 शामिल .. मुझे आपके जैसी ही समस्या का सामना करना पड़ रहा था और अभी जवाब मिला।

jinja_environment = jinja2.Environment(autoescape=True, 
    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates'))) 

class MainPage(webapp2.RequestHandler): 
    def get(self): 
     template_values = { 
      'name': 'Serendipo', 
      'verb': 'extremely happy' 
     } 

     template = jinja_environment.get_template('index.html') 
     self.response.out.write(template.render(template_values)) 

"jinja_environment" भाग को अतिरिक्त [, 'टेम्पलेट्स'] की आवश्यकता नहीं है। यह आप की तरह अपने index.html फ़ाइल स्ट्रिंग से पहले रखना चाहिए:

template = jinja_environment.get_template('templates/index.html') 

कम से कम इस लिए कि यह कैसे मेरे लिए काम किया है (ओह, और मैं या तो autoescape = सच भाग का उपयोग नहीं कर रहा था, लेकिन मैं अपने वैकल्पिक अनुमान)।

फिर से सोच रहा है, शायद आप [, 'टेम्पलेट्स] भाग भी छोड़ सकते हैं, लेकिन आपको' index.html 'से पहले "/" रखना होगा, जिससे' /index.html 'बन जाएगा, लेकिन यह है एक और अनुमान

+0

'ऑटोस्केप = ट्रू' वेब विकास पर टेम्पलेट पेश करने पर उदारता पाठ्यक्रम के लिए सही था – itmatters

2

[1] और यहां वर्णित webapp2_extras सेटअप का उपयोग करने के बाद, मुझे अभी भी यह त्रुटि थी। मैंने logging.info (jinja2.default_config) की कोशिश की। इससे पता चला है कि टेम्पलेट्स के लिए अनियंत्रित डिफ़ॉल्ट निर्देशिका ऐप-यमल-डीआईआर/टेम्पलेट्स/('टेम्पलेट_पैथ': 'टेम्पलेट्स') है। मैंने सब कुछ करने की कोशिश की है। एक बार जब आप इसे जानते हैं, तो आप इसे रीसेट कर सकते हैं, या इसे छोड़ सकते हैं।

jinja2.default_config['template_path'] = "html" 

आप विभिन्न निर्देशिका में टेम्पलेट्स डाल करने के लिए पसंद करते हैं, बस जब render_response('module/home.html', **context)

jinja2.default_config['template_path'] = "" 
  1. http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html#webapp2_extras.jinja2.Jinja2
0

jinja_environment = jinja2.Environment(autoescape=True, loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates'))) असल में प्रतिपादन खाली और पूर्ण पथ का उपयोग करने के लिए सेट आपके कोड में लाइन का अर्थ है कि आप टेम्पलेट फ़ोल्डर में अपना अनुरोध भेजते हैं लेकिन ऐसा लगता है कि आपने टेम्पलेट फ़ोल्डर में अपना "index.html" संग्रहीत नहीं किया है, इसलिए केवल पुनर्निर्देशन को हटाएं या अपनी अनुक्रमणिका फ़ाइल टेम्पलेट फ़ोल्डर में स्थानांतरित करें।

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