2012-06-13 9 views
5

Próbuję zbudować moją pierwszą aplikację GAE z jinja2. Po pokonaniu tuzin małych błędów, teraz utknąłem z tym:TemplateNotFound: index.html z Google App Engine i Jinja2

Traceback (najnowsza wezwanie ostatni):

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 

Oto mój plik 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" 

Oto mój kod:

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) 

Oto moja .html szablon:

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

Mimo komunikatu o błędzie, mam folder o nazwie "szablony", a wewnątrz niej, utworzony plik index.html:

enter image description here

enter image description here

enter image description here

I również zainstalowałem jinja2.

Czy ktoś ma teraz pojęcie przyczyny tego błędu?

Odpowiedz

5

Prawdopodobnie powinieneś używać wersji jinja2 zawartej w webapp2_extras.

Przykład coraz to skonfigurować jest tutaj: http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html#webapp2_extras.jinja2.Jinja2

Kluczową różnicą jest to, że zamiast konfigurowania jinja2.Environment siebie, robisz ...

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

Będziesz także prawdopodobnie potrzeba obejmują jinja2 w sekcji libraries z app.yaml:

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

Witam, @jgeewax, włączyłem "- name: jinja2 version: 2.6" w mojej sekcji bibliotek (właściwie to już tam było, popełniam błąd, wklejając go w tym pytaniu). Będę studiować wydanie wersji jinja2 czytając link, który wskazałeś. – craftApprentice

2

Man .. Miałem taki sam problem jak ty i właśnie znalazłem odpowiedź.

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

Część "jinja_environment" nie potrzebuje dodatkowych [, "szablonów"]. To należy umieścić przed plik index.html ciąg jak:

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

Przynajmniej tak to pracował dla mnie (oh, a ja nie używałem autoescape = true część albo, ale myślę, że jego opcja).

Myśląc jeszcze raz, może mógłbyś nawet opuścić część [, "szablony"], ale musisz umieścić "/" przed "index.html", tworząc "/index.html", ale to jest inne przypuszczenie.

+0

'autoescape = True'' było odpowiednie dla kursu udacitity w zakresie tworzenia szablonów do tworzenia stron WWW – itmatters

2

Po użyciu konfiguracji webapp2_extras opisanej w [1] i tutaj nadal miałem ten błąd. Próbowałem logging.info (jinja2.default_config). To pokazało, że nieudokumentowanym domyślnym katalogiem szablonów jest app-yaml-dir/templates/('template_path': 'templates'). Próbowałem wszystkiego poza tym. Możesz go zresetować lub pozostawić bez zmian, gdy tylko się zorientujesz.

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

Jeśli wolisz, aby umieścić szablony w różnych katalogów, wystarczy ustawić go opróżnić i wykorzystać pełną ścieżkę przy renderowaniu 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'))) rzeczywistości linia w kodzie oznacza, że ​​kierujesz swoje żądanie do folderu szablonów ale wygląda na to, że nie zapisałeś swojego "index.html" w folderze szablonów, więc po prostu usuń przekierowanie lub prześlij plik indeksu do folderu szablonów.