Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2 Zaven Muradyan
06/05/12 11:32:22
CS253 Appendix B
Naturally, you want to take the HTML that you use to generate your web page out of your Python code and into a template document, right? Well, AppEngine comes with a templating engine that can help you do just that!
Jinja2
Jinja2 is a powerful templating engine modeled after Django's templating system. The idea is to separate your logic from your presentation, and make your code clean and well-defined in the process. Here's the basic process to get it working in AppEngine.
The important bit is the libraries section - that's where you grant access to Jinja2.
CS253 Appendix B
06/05/12 11:32:22
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Look Ma, I'm using Jinja!</title> 5 </head> 6 <body> 7 Hi there - I'm {{ name }}, and I {{ verb }} programming! 8 </body> 9 </html>
The placeholders {{ name }} and {{ verb }} are what Jinja2 replaces with the data that your app provides. Remember these names - you'll have to use them when you send data to the templating engine. Almost done!
A few things to note here: the jinja2.Environment object that we're instantiating takes a loader argument, which takes a directory from which it can load templates; we've imported the os module just so that we can use its path manipulation functions to get the path to our templates directory. Notice also that we've used the autoescape=True argument - this makes Jinja2 escape all dangerous strings for us, so we don't have to! Finally, to use the template in one of our request handlers, use something like this: 1 class MainPage(webapp2.RequestHandler): 2 def get(self): 3 template_values = { 4 'name': 'SomeGuy', 5 'verb': 'extremely enjoy' 6 } 7 8 template = jinja_environment.get_template('index.html')
2/3
CS253 Appendix B
06/05/12 11:32:22
9 self.response.out.write(template.render(template_values))
First we create a dictionary with the name/value pairs for the template - notice that the keys are the same as those included in the template. Then we retrieve a template object using jinja_environment.get_template, and finally we render and write out the resulting HTML using template.render(template_values). And that's it! Try it out!
3/3