Introducing Nemo: A Pythonic Haml
github.com
github.com
html
head
title My web page
meta name=this content=that
link rel=stylesheet href=style.css
script src=jquery.js
body
header
logo
img src=logo.jpg
main
content .center
h1 Welcome to my site
p
This is my first post
Feel free to comment at the end.
pre #hello
a=1+2+3
print a
footer
p no copyrights at all
Assume every first word is a known tag or convert it to div with id. Use significant white space. Content tags like 'p' or 'pre' are closed by a blank line.It may work for 90% of my own projects and it is by far the simplest markup I have seen, evar.
I'd love to see your code.
Right now, its' looking like a better version of SPHaml, but who can tell without seeing the gotchas'.
Like when it comes to assumptions, you'd be surprised how many times I write the word "option" as the first thing in a sentence. =)
If you do get the time, check out the code and see if you can tweak things to your liking.
I'll be doing a cleanup/refactoring later this week to make things better.
However, the core of Nemos' parsing is handled by pyparsing, so if you can read and write eBNF, then you can tweak Nemos' syntax to your liking pretty easily.
Mako is faster than Django templates--at least by a factor of 4--and in the neighborhood of speed with Cheetah. Only Spitfire templates are faster.
This is important for any app that is CPU bound due to rendering speed.
http://hotwax.cjmunday.com/python.html#sec-1.2
See the CherryPy file browser example later in the page for a demonstration of how it's used.
To me, it seems that everyone is striving to find an easier way to programmatically create HTML in Python. The current range of templating languages just don't cut it.
I think there's no definitive solution partially because everyone is copying Haml, and Hamls' syntax and trade-offs aren't really appropriate for Python users.
Right now its confusing.
But if I'd known about this project a few days ago, you'd have definitely been added to my list of Muses.
Also, does your fork support the full range of Mako control structures? Looking at the nodes.py it seems that its still targeted towards a Django-templates backend.
I'd suggest making 'while' self closing.
How do you handle Mako defs, and namespace tags?
It registers a Mako template loader with Django, that by default points to your /templates directory in your folder.
However you can override it by modifying MAKO_TEMPLATE_DIRS in your settings.py. MAKO_TEMPLATE_DIRS is just a tuple containing the directories to look under for Mako/Nemo files.
My full project runs under Mako, but 3rd party apps, and the django admin run with django-templates.
Hilarious. And probably true.
I don't want to talk badly about it--because to be honest it has some really cool features like chained-method-calls that allow you to quickly compose HTML attributes via inheritance----but Mint has always struck me as more Perl than Python.
Look at this:
@p.class(title).title({{ doc.title }}) {{ doc.title }}
That transforms into this HTML (unescaped urls because Mint produces XML by default): <p class="title" title=">b<title>/b<">
<b>title</b>
</p>
The alternative in Nemo is: % p .'title' title='${doc.title}' || ${ doc.title }
I don't know why Nemo looks better in my eyes but I think it has to do with explicit separation, and string substitution instead of a method-call syntax.Mint feels like a programming language that happens to produce HTML as a side-effect.