Recently, I started to use aiohttp server and aiohttp_jinja2 for my personal project. It is very useful.
My python version is 3.8.2.
$ python --version Python 3.8.2 # requirements.txt aiohttp[speedups] aiohttp_jinja pip install aiohttp[speedups] pip install aiohttp_jinja
Project directory is like below
. └── app ├── main.py └── templates ├── index.html └── layout.html
aiohttp_jinja and aiohttp Class Based View can be used like below example.
# main.py import logging import pathlib import sys import jinja2 import aiohttp_jinja2 from aiohttp import web @aiohttp_jinja2.template("index.html") class HomeHandler(web.View): async def get(self): return {} async def post(self): form = await self.request.post() return {"name":form['name']} if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) app = web.Application() # setup jinja2 aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader( 'templates' )) app.router.add_get('/', HomeHandler, name="index") app.router.add_post('/', HomeHandler) web.run_app(app)
<!-- layout.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>aiohttp and jinja test</title> </head> <body> <h1>My aiohttp jinja demo</h1> {%block body%}{%endblock%} </body> </html>
<!-- index.html --> {% extends "layout.html" %} {% set title = "Main" %} {% block body %} <h2>Form test extended from layout.html</h2> <form method="POST" action="{{ url('index') }}"> <input type="text" name="name" id="name"/> <input type="submit"> </form> {% if name %} <p>My name is {{ name }}</p> {% endif %} {% endblock %}
Top comments (2)
Great work! Way to go
Thanks !