Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/nosamanuel/cottonmouth

Pure-Python HTML generation
https://github.com/nosamanuel/cottonmouth

Last synced: 7 days ago
JSON representation

Pure-Python HTML generation

Awesome Lists containing this project

README

        

cottonmouth
===========

Pure-Python HTML generation, inspired by [Hiccup][1].

```python
from cottonmouth.html import render
from cottonmouth.tags import html, head, body, title, meta, link, h1

def welcome(user=None, **context):
return ['p', 'Welcome' + (' back!' if user else '!')]

content = (
# Feel free to use raw HTML
'',
# Tags are represented as sequences with a tag name at the head
[html,
# Or just use strings instead of the default tag symbols
['head',
[title, 'The Site'],
# Attributes are passed as a dict immediately after the tag
[meta, {'charset': 'utf-8'}],
[link, dict(rel='stylesheet', type='text/css',
href='static/layout.css')]],
[body,
# You can also call tags as functions with the content as
# the first argument and attributes as `kwargs`
[header, h1(u'The Website', id='header')],
# Use "#id.class" shortcuts to easily create `div` elements
['#map.pretty-map'],
# Functions will be called with context and the results rendered
['#main', welcome]]]
)

render(*content, user=None)
```

Equivalent output:

```html

The Site

Welcome to the site!




Welcome!


```

### Classes

There's a shortcut for dynamic classes: strings or iterables of classnames are automatically appended to the sugared classname!

```python
render(['.foo', {'class': 'bar baz'}])
# u'

'

render(['.foo', {'class': ['bar', 'baz']}])
# u'

'
```

### Installation

pip install cottonmouth

### Testing

python setup.py test

### License

BSD Copyright 2013, Noah Seger

[1]: https://github.com/weavejester/hiccup