Simple Pythonic HTML Creator
Project description
Ultra simple and works
Compatible with Python3/ 2.x
- Pythonic
>>> adiv = tf.DIV("Hello World!", id="header_1", Class="header") >>> print (adiv) <DIV id="header_1" class="header">Hello World</DIV>
Examples
Hello World!
>>> import sphc >>> tf = sphc.TagFactory() >>> header = tf.H1("Hello World!") >>> print(header) <H1>Hello World</H1>
Constructing a page
>>> doc = tf.HTML() >>> doc.body = tf.BODY() >>> doc.body.content = tf.H1("The content") >>> print(doc) <HTML> <BODY> <H1>The content</H1> </BODY> </HTML>
Using list of Tag objects
Especially usefule for constructing tables and select options:
>>> data = [('One', '1'), ('Two', '2'), ('Three', '3')] >>> atable = tf.TABLE() >>> for element in data: >>> row = tf.TR() >>> row.cells = [tf.TD(element[0]), tf.TD(element[1])] >>> atable.row = row
Wrapping
>>> block1 = tf.DIV(tf.DIV("content", Class="inner"), Class="outer") >>> block2 = tf.DIV([tf.DIV(), tf.DIV()], Class="outer") >>> content = tf.DIV([block1, block2])
Chaining
set_required method below sets required property on Tag object AND returns Tag object:
>>> form = tf.FORM() >>> form.username = tf.INPUT(name="username").set_required() >>> print(form) <FORM> <INPUT name="username" required/> </FORM>
Properties with no value required
>>> c = tf.INPUT(nv_attrs=['checked'], type='checkbox', value='foo') >>> print(c) <INPUT checked type="checkbox", value="foo"/>
Escaping
>>> print(tf.C(' >> ')) # Default >>> <C> >> </C> >>> print(tf.C(' >> ', escape=False)) >>> <C> >> </C>
More
Well since you reached here time to show some experimental stuff.
Hello sphc.more
(loosely based on html5boilerplate.com templates):
>>> import sphc.more >>> tf = sphc.TagFactory() >>> class MyPage(sphc.more.HTML5Page): def footer(self): return tf.FOOTER("Footer text") >>> my_page = MyPage() >>> my_page.render()
This will return a string that would contain html exactly like what you have expected
Building a form
>>> import sphc >>> import sphc.more >>> >>> tf = sphc.TagFactory() >>> >>> form = sphc.more.Form(classes=['vform']) >>> form.add_field('Username', tf.INPUT(type="TEXT", id='username', name="username").set_required()) >>> form.add_field('Password', tf.INPUT(type="password", id='password', name="password")) >>> form.add_buttons(tf.BUTTON("Log In", id='login-btn', type='button')) >>> print form.build() <FORM method="POST" Class="vform"> <DIV Class="field"> <DIV Class="field-label"> <LABEL For="username">Username</LABEL></DIV> <DIV Class="field-input"> <INPUT required type="TEXT" name="username" id="username"></INPUT><C>*</C> </DIV> </DIV> <DIV Class="field"> <DIV Class="field-label"> <LABEL For="password">Password</LABEL></DIV> <DIV Class="field-input"> <INPUT type="password" name="password" id="password"></INPUT> </DIV> </DIV> <DIV Class="action-status"></DIV> <DIV Class="buttons"> <BUTTON type="button" id="login-btn">Log In</BUTTON> </DIV> </FORM>
Form with fieldsets
>>> form = sphc.more.Form() >>> >>> about = form.add(sphc.more.Fieldset()) >>> about.add(sphc.tf.LEGEND('About')) >>> about.add_field('Name', sphc.tf.INPUT(name='name', type='text')) >>> >>> contact = form.add(sphc.more.Fieldset()) >>> contact.add(sphc.tf.LEGEND('About')) >>> contact.add_field('Name', sphc.tf.INPUT(name='name', type='text'))
Finally
Source: https://github.com/shon/sphc
Any suggestions/issues | https://github.com/shon/sphc/issues
Critisism or if you feel such thing already implemented feel free to write Authour.
Similar packages
http://shpaml.webfactional.com/ # Just awesome
http://pypi.python.org/pypi/html # Inspiration. It uses __getattr__ trick whereas this package is mostly a __setattr__ trick, aiming sharing of blocks.
TODO
To add more tests
A document class ?
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.