Heim >Backend-Entwicklung >Python-Tutorial >Das Tornado-Framework von Python ist für die Verwendung der Jinja2-Vorlagen-Engine konfiguriert

Das Tornado-Framework von Python ist für die Verwendung der Jinja2-Vorlagen-Engine konfiguriert

高洛峰
高洛峰Original
2017-03-01 13:41:372048Durchsuche

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)
Mehr Pythons Tornado-Framework-Konfiguration verwendet die Jinja2-Vorlage. Achten Sie bei motorbezogenen Artikeln bitte auf PHP-Chinesisch Webseite!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn