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對象。