0
你好Stackoverflow大師的!用一個Handler渲染多個Jinja模板
我是一個完整的newb,我有一個問題,我似乎無法找到答案(希望是因爲它是如此簡單,沒人打擾要問)。
我正在設計一個網站,有一堆食譜使用谷歌應用程序引擎。我希望能夠使用一個處理程序呈現一大堆配方頁面,因爲我打算以後會有很多配方,並且我不想爲每個配方創建一個新的處理程序。我的代碼如下:
import urllib2
import webapp2
import jinja2
import os
JINJA_ENVIRONMENT = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True)
class Handler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self,template,**params):
t = JINJA_ENVIRONMENT.get_template(template)
return t.render(params)
def render(self,template,**kw):
self.write(self.render_str(template,**kw))
class MainHandler(Handler):
def get(self):
template = JINJA_ENVIRONMENT.get_template('main.html')
self.response.write(template.render())
class RecipeHandler(Handler, recipe):
def get(self, recipe):
recipe_pages = {
'carbonara' : 'carbonara.html'
'burger' : 'burger.html'
}
if recipe in recipe_pages:
template = JINJA_ENVIRONMENT.get_template(recipe_pages[recipe])
self.response.write(template.render())
else:
self.abort(404)
app = webapp2.WSGIApplication([
('/', MainHandler),
('/carbonara', RecipeHandler(carbonara)),
('/burger',RecipeHandler(burger)),
], debug=True)
我基本上要避免編寫出了「CarbonaraHander」和「BurgerHandler」,只是用「RecipeHandler」來呈現這兩個網頁。我知道應該是可能的,但我不知道該怎麼做。
任何幫助表示讚賞!
編輯:我想我應該使用一些稱爲正則表達式的東西?但我真的不明白他們在這種情況下需要如何使用。
同樣,我在這裏一個完整的新手,所以我花了擺弄了幾個小時用你的代碼來弄清楚它做了什麼,但它的工作!謝謝@DanCornilescu! –