Enaml Web

A library to build websites using server side web components and an existing web server (tornado, twisted, cyclone, etc..)..


code

Declarative

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 http with the addition of variables and programming constructs like conditional and loop statements.

http

Web Components

Components are defined and rendered server side. This translates into an extremely fast and smooth user experience for clients. It's just HTTP. Meaning you can integrate any css framework you like, any js libraries you like, and it just works.

cached

Fast and Efficient

Built on existing and proven server frameworks such as Twisted and Tornado. 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!).

Hello World
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"
Components
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"
    #: ...
Easily define templates
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!