sanic(3):調用templates

  • 2019 年 11 月 21 日
  • 筆記

經過上文,我們已經能輸出hello這個單詞。這說明服務已經成功響應。這裡,我們將使用jinja2來進行html的渲染。 jinja2怎麼用,已經超出了本文範圍,所以本文只講後端的調用。

創建Jinja2服務

回憶一下,在app.py中,已經定義了jinja2的服務,程式碼如下:

...  @app.listener('before_server_start')  async def setup_db_redis(app, loop):      ......      templates_path = os.path.join(os.getcwd(), 'templates')      app.template_env = Environment(          loader=FileSystemLoader(templates_path),          autoescape=select_autoescape(['html', 'xml']),          enable_async=False      )

這裡我使用了FileSystemLoader做為loader,避免亂七八糟的問題。

後端渲染

在我寫完這些程式碼之時,前端的哥們已經把html文件寫好了。所以項目中多出了這樣的結構:

├── templates  │   └── web  │       ├── index.html

渲染示例

index.py文件:

@games_bp.route('/index', methods=['GET'])  async def index(request):      logging.info("index run")      online_items = await QB_GAMES.where(eq(online=1)).order_by_desc('id').run()      template = request.app.template_env.get_template('web/index.html')      html_content = template.render(online_items=online_items)      return html(html_content)

1.從資料庫中獲取了onlien_items(當然你也可以從其它地方獲取數據)。 2.通過request.app獲取到app對象。jinja2的templates做為一個屬性被保存到了app中。 3.使用jinja函數get_template獲取templates對象。 4.使用調用render方法渲染出html 5.用sanic的html()方法返回這個response對象。