An amazing web prototyping tool.
An amazing prototyping tool.
With Clay you can forget about making changes to dozens of HTML files just because you need to add a link in the footer.
You can also use it to prototype your AJAX-driven application or the responses of sending forms, because it acts like a real server.
pip install clay
Clay version 3.x only works with Python 3.6, 3.7, and 3.8.
clay new myapp
will generate a new app container with the following structure:
myapp ├── static/ ├── clay.yaml └── ...other files
# Absolute or relative path. clay new myapp /path/to/project/template # GitHub repo. Note the ".git" postfix. clay new myapp https://github.com/lucuma/clay-template.git # The same GitHub repo with shortcut clay new myapp gh:/lucuma/clay-template.git
Inside that folder, run the development server with:
and your site'll be available at
Anything inside the
static folder is served as-is under the
For example you can see
myapp/static/image.png at the
Any file outside the
static folder, is rendered as a page.
myapp/page.html is rendered and shown at
http://0.0.0.0:8080/page.html, as an HTML page.
myapp/foo/bar.json is rendered and shown at
http://0.0.0.0:8080/foo/bar.json as a JSON document.
Remember to put inside
static anything you don't want to be rendered.
To generate a static version of your site, first, stop the server with
Control + C, and then run:
and all the templates will be processed and the result stored inside the
If you have folders in your project, you might be tempted to write internal URLs like this
<!-- DON'T DO THIS -> href="../a.html" src="../static/main.js"
Don't do it. Is error-prone and could not worl if you do it in a base layout, for example. Always write the internal URLs using their path from the root of the project, like this:
That'll work on the development server and also when generating a static version of your site, Clay will convert them into relative paths automatically.
When writing your templates, in addition of what is normally available in Jinja templates you have access to some other helper functions:
- The python's functions
nowfunction, as an alias to
activefunction, to set an "active" class in navigations/menus when the current page match.
active(*url_patterns, partial=False, class_name="active")
If a YAML file named
clay.yaml is found in the root of the project, it will be read and used for configuring Clay.
# Shell-style patterns files/folders that must not be rendered. exclude: - ".*" - ".*/*" - "_*" - "_*/*" - "*.txt" # Shell-style patterns files/folders that *must be* rendered, even if # they are in the exclude list include: - "robots.txt" - "humans.txt"
Update from v2 to v3+
Before v3, previous versions of Clay did work with having all source files in a
source subfolder. However, this is no longer the case, and the recommended setup is to have them in the parent folder instead.
The old project with a
source folder still works, but it might change in future versions.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size clay-3.5-py3-none-any.whl (204.9 kB)||File type Wheel||Python version py3||Upload date||Hashes View|
|Filename, size clay-3.5.tar.gz (202.3 kB)||File type Source||Python version None||Upload date||Hashes View|