Jinja2 ist die integrierte Template-Engine im beliebten Web-Framework Flask und ähnelt der Template-Engine von Django. Hier werfen wir einen Blick darauf, wie die Jinja2-Template-Engine für das Tornado-Framework von Python konfiguriert wird
Tornado-Standard Es gibt eine Template-Engine, aber ihre Funktionen sind einfach (tatsächlich sind alle, die ich verwenden kann, ähnlich) und die Verwendung ist ziemlich mühsam. Die Syntax von Jinja2 ähnelt der von Django-Vorlagen, also habe ich mich dafür entschieden Benutze es.
Jinja2 herunterladen
Oder verwende pip zum Herunterladen (es macht wirklich Spaß)
pip install jinja2
Auf diese Weise können Sie es verwenden.
Integration von Tornado und Jinja2
Es ist sehr einfach, Tornado und Jinja2 zu integrieren (tatsächlich ist es ist relativ einfach online zu finden. Ich weiß nicht, wo ich es gefunden habe, aber ich werde nicht auf Details eingehen und einfach auf den Code gehen 🎜>
Auf diese Weise können Sie self.render in Tornado durch self.render_html ersetzen.
#coding:utf-8 import tornado.web from jinja2 import Environment, FileSystemLoader, TemplateNotFound class TemplateRendring(object): """ A simple class to hold methods for rendering templates. """ def render_template(self, template_name, **kwargs): template_dirs = [] if self.settings.get('template_path', ''): template_dirs.append(self.settings['template_path']) env = Environment(loader=FileSystemLoader(template_dirs)) try: template = env.get_template(template_name) except TemplateNotFound: raise TemplateNotFound(template_name) content = template.render(kwargs) return content # 就是重新写 BaseHandler 由jinja2模板渲染 class BaseHandler(tornado.web.RequestHandler, TemplateRendering): """ Tornado RequestHandler subclass. """ def initialize(self): pass def get_current_user(self): user = self.get_secure_cookie('user') return user if user else None def render_html(self, template_name, **kwargs): kwargs.update({ 'settings': self.settings, 'STATIC_URL': self.settings.get('static_url_prefix', '/static/'), 'request': self.request, 'current_user': self.current_user, 'xsrf_token': self.xsrf_token, 'xsrf_form_html': self.xsrf_form_html, }) content = self.render_template(template_name, **kwargs) self.write(content)