Skip to main content

MakeWeb

Make interactive web apps using good ol' HTML, CSS and a sprinkling of JavaScript — in Python.

Examples

HyperText Markup Lnguage

If we run this script:

# 00-generate-html.py

from makeweb import Doc, body, h1

def generate_html():
    doc = Doc('html', lang='mr')
    with body():
        h1('हा!')
    return str(doc)

print(generate_html())

We should see this output on the screen:

<!doctype html>
<html lang="mr">
<body>
  <h1>हा!</h1>
</body>
</html>

(Whitespace added for clarity.)

Ha! HTML was easy, let us generate CSS from Python code.

Cascading Style Sheets

# 01-generate-css.py

from makeweb import CSS

css = CSS()

css('body', background='white', color='#222')
css('h1', color='darkorange', margin__top='1em')

print(str(css))

Running the above example we see...

body{
  background:white;
  color:#222
}
h1{
  color:darkorange;
  margin-top:1em
}

(Whitespace added for clarity.)

Notice that the double underscore in css('h1', margin__top='1em') gets converted to hyphen in CSS as h1{margin-top:1em}. This pattern is used throughout the library for HTML and CSS attributes.

So... CSS is even easier?! How about something more ambitious?

JavaScript

# 02-generate-js.py

from makeweb import JS

js = JS()

@js.function
def say_hello():
    hello_box = document.getElementById("hello_box")
    hello_box.innerHTML = "Hello, World Wide Web!"

print(str(js))

And we get a JavaScript function out!

function say_hello(){
  var hello_box;
  hello_box=document.getElementById("hello_box");
  hello_box.innerHTML="Hello, World Wide Web!";
}

(Whitespace added for clarity.)

Now let us use these capabilities together!

App

# hello-readme.py

from flask import Flask, Response
from makeweb import (
    Doc, CSS, JS,
    head, title, style, script,
    body, h1, button,
)

# We'll use Flask to serve, you could use any other framework 
# or save as static files, or anything else 
# that you wish to do with generated html.
app = Flask(__name__)  
css = CSS()
js = JS()

css('*,body',   # <-- Add CSS to taste.
    font__family='sans-serif',
    text__align='center')
css('h1', color="darkblue")  


@js.function  # <-- A sprinkling of JavaScript. Look ma, no braces!
def say_hello():
    hello_box = document.getElementById("hello_box")
    hello_box.innerHTML = "Hello, World Wide Web!"


@app.route('/')
def index():
    doc = Doc('html')  # <-- Generate all the HTML your app (really) needs.
    with head():
        title('Hello')
        with style():  # Embed CSS.
            css.embed()
    with body():
        h1('...', id='hello_box')  # Set attributes. 
        button('Hello', onclick="say_hello()")  # <-- hook up say_hello().
        with script():  # Embed JavaScript.
            js.embed()
    return Response(str(doc))  # <-- Serve all the awesome your users desire!


app.run()  # <-- It is time! 

This app transfers ~550 bytes over the network in order to run successfully, that is including the HTTP headers overhead. You read that right, not even one kilobyte! The web technologies are quite simple and straightforward for general use, and very flexible, robust and powerful too!

You might not need (or want the baggage of) complex tooling for a small project. It could be a one time make-and-forget tool at work or a weekend hobby project, or maybe something even larger if you really like this way of working. MakeWeb can come in handy because it makes it almost trivial to build the web like it was intended, straight from your Python code.

Wait, somebody mentioned single-page-apps? How about single source-file apps that don't download half the internet to work? 😂 Kidding, this is a very, very barebones system, and therefore you can use any existing stylesheets or JS libraries alongside MakeWeb.

Check out examples for more demos!

Install

# Clone the repository
git clone https://github.com/hiway/makeweb.git
cd makeweb

# Install poetry if you haven't already
pip install poetry

# Install makeweb with JS support
poetry install --with js

# For development
poetry install --with dev

# For running examples
poetry install --with examples

# For everything
poetry install --with dev,js,examples

Using pip (Legacy)

Stable

python3 -m venv makeweb
source makeweb/bin/activate
pip install makeweb[js]

Current

python3 -m venv makeweb
source makeweb/bin/activate
git clone https://github.com/hiway/makeweb.git
cd makeweb
pip install -e .[examples]

Development

python3 -m venv makeweb
source makeweb/bin/activate
git clone https://github.com/hiway/makeweb.git
cd makeweb
pip install -e .[dev]
  • libtidy-dev

Test

pytest tests.py

With coverage:

pytest --cov=makeweb --cov-report=term tests.py

Metadata

Release files for makeweb 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for makeweb 0.2.3
File Size Uploaded
makeweb-0.2.3.tar.gz 11.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for makeweb 0.2.3
File Interpreter ABI Platform
makeweb-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 22.0 kB

Release files / makeweb-0.2.3.tar.gz

Download URL makeweb-0.2.3.tar.gz
Size 11.4 kB
Tags Source
SHA-256 checksum
How to use checksums
bb6d141234af95425535c8ecc67806d3f061b3b414e2f99dacd18693d77e6720
BLAKE2b-256 checksum
How to use checksums
c774ac2bb3b8bda4b956e25dd2e8ef6ae1d8d71a7b8030f3b1826334a73833e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.5 CPython/3.12.3 Linux/6.8.0-51-generic

Release files / makeweb-0.2.3-py3-none-any.whl

Download URL makeweb-0.2.3-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3234fac95cbc2228008e172bc9dd84255295c731b8199f906ac0a566470776f5
BLAKE2b-256 checksum
How to use checksums
e754eaa648082a977f03288c82f22e2505b58e876f699723d0de5601b5b9c07b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.5 CPython/3.12.3 Linux/6.8.0-51-generic

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page