Enaml-web is like react's JSX, just it uses python. Components are defined declaratively making them easy to read, extend, and modify. It's like using raw html with the addition of variables and programming constructs like conditional and loop statements.
Components are defined and rendered server side. This translates into an extremely fast and smooth user experience for clients. It's just HTML. Meaning you can integrate any css framework you like, any js libraries you like, and it just works.
Uses existing python server frameworks such as Flask, Twisted, Tornado, or Django. Simply import the view definition, create a view with your models, and call render. When your data changes, only the nodes that changed are re-rendered, making it extremely fast (rendering is in C!).
from web.components.api import * #: Simply replace HTML tags with the captialized name enamldef Index(Html): Head: Title: text = "Hello world" Body: H1: text = "Hello world"
from web.components.api import * #: Define a component enamldef Icon(I): tag = 'i' cls = 'material-icons' #: Then use it enamldef Page(Html): #: ... Icon: text = "android" #: ...
from web.components.api import * from web.core.api import Block #: Templates can be made using `Blocks` enamldef Base(Html): attr user attr site attr request alias content Head: Title: text << site.title Body: Header: text = "Header" #: Block content be replaced in subclasses Block: content: pass Footer: text = "Footer" #: Now just extend the base template to use it enamldef Page(Base): page: Block: block = page.content P: text = "Replaces content!"
In case you're wondering, yes, this website is built with enaml-web!