2012-06-15 515 views
1

我正在努力讓Jinja2能夠與Google AppEngine一起工作。我有我的main.py代碼如下:需要幫助才能讓jinja2工作

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': 'SomeGuy', 
      'verb': 'extremely enjoy' 
     } 

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

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

這已經殺了我幾個小時,我將不勝感激的一些幫助。

更新:

我已更改代碼以更新情況。日誌告訴我:

ImportError: <module 'main' from '/base/data/home/apps/s~devpcg/1.359633215335673018/main.pyc'> has no attribute app 

和上面的代碼都來自我的main.py文件夾。我在名爲templates的文件夾中有一個文件index.html,它與main.py文件位於同一目錄中。

+0

我看不錯。你有什麼錯誤嗎?您是否嘗試過部署到GAE?如果是這樣,它看起來如何?你有'app.yaml'中指定的jinja2嗎? 'jinja_environment'行只是告訴jinja在哪裏可以找到相對於當前文件路徑的templates目錄。所以如果你在'main.py'文件中有這樣的代碼,你需要'''目錄與main.py'文件在同一層。 – bernie

+0

這是一個非常簡單 - 但確認工作! - 這個應用程序可以幫助你設想事情是如何結合在一起的:https://bitbucket.org/abernier/anotherday/src但是你的代碼真的很好。 – bernie

+0

當我部署到GAE時,它只是給我一個500服務器錯誤。並且我沒有收到任何其他錯誤 – clifgray

回答

3

我不知道,如果這是一個複製粘貼錯誤粘貼代碼時到計算器,但你似乎是在評論中指出要得到一個壓痕錯誤...
這是正確的縮進:

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

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

編輯:
基於新的錯誤,我會建議你給一點關於你的應用程序是如何組織的更多信息。
我猜你正在向我們展示你的main.py文件。
如果確實如此,您需要在該文件中使用下面的代碼(假設Python 2.7)。
更多粒狀詳細信息,請參閱文檔:
https://developers.google.com/appengine/docs/python/python27/using27#Configure_WSGI_Script_Handlers

app = webapp2.WSGIApplication(routes=[ 
    (r'/', MainPage), 
    # ... other paths ... 
], debug=True) # True for now until ready for prod... 
+0

我剛剛更新了問題中的情況。讓我知道你是否需要任何進一步的信息。謝謝! – clifgray

+1

看起來不錯。你有什麼幾乎在那裏。只需在'main.py'文件的最後一行之前添加'app =':'webapp2.WSGIApplication([('/',MainPage)],debug = True)',使其看起來像:'app = webapp2。 WSGIApplication([('/',MainPage)],debug = True)'因爲這就是你的'app.yaml'(最有可能)告訴GAE尋找。 – bernie

+0

GOT IT!啊,非常感謝,我不能相信我錯過了。 – clifgray