Tidy html output?

99 views
Skip to first unread message

Robin Manoli

unread,
Apr 29, 2014, 2:46:19 AM4/29/14
to web...@googlegroups.com
Hey!

I'm wondering if there is a way to make the html output beautifully indented and more easily readable?

Vasile Ermicioi

unread,
Apr 29, 2014, 3:55:53 AM4/29/14
to web2py-users


On Tue, Apr 29, 2014 at 9:46 AM, Robin Manoli <rama...@gmail.com> wrote:
Hey!

I'm wondering if there is a way to make the html output beautifully indented and more easily readable?

--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups "web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to web2py+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

aleon...@gmail.com

unread,
Apr 29, 2014, 4:21:21 PM4/29/14
to web...@googlegroups.com
I just wrote that function check it out.

def pretty_html(obj):
   
import xml.dom.minidom as xml
    declaration
= len(xml.Document().toxml())+1
    doc
= xml.parseString(obj.xml())
   
return XML(doc.toprettyxml()[declaration:])


Where obj is a web2py helper. You can easily change it to accept plain text.

Robin Manoli

unread,
Sep 18, 2014, 6:56:01 AM9/18/14
to
Sorry for a late reply!

How would I implement this? What I would like to do is to render pretty html in development mode (I have a global variable development_mode = True). Would I have to render the views myself? It would really be nice if I somewhere could just tell web2py in one place to render all views like that, or perhaps it would be better if I could decorate a controller with it (how?)?

Robin Manoli

unread,
Sep 18, 2014, 8:17:17 AM9/18/14
to web...@googlegroups.com
I did write a decorator (my first) myself. It works, except adding a starting and ending comment for the pretty html code (the PRETTY function got this error: <type 'exceptions.AttributeError'> 'str' object has no attribute 'xml').

def COMMENT( text ):
    """ Create an HTML comment """
    if type(text) == type('str'):
        return XML( "<!-- %s -->" % text )
    return text

def PRETTY( html_helper ):
    """ Make HTML pretty, originally made by aleon: https://groups.google.com/d/msg/web2py/pyOosnV9AuQ/BDXzTfHYV4YJ """

    import xml.dom.minidom as xml
    declaration = len(xml.Document().toxml())+1
    doc = xml.parseString(html_helper.xml())
    return XML(doc.toprettyxml()[declaration:])

def PrettyDevHTML(func):
    """ Make html output pretty in Site.dev mode"""
    # for developing/-bugging this: http://thecodeship.com/patterns/guide-to-python-function-decorators/
    def func_wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if
development_mode:
            #result = COMMENT( 'PrettyDevHTML Start' ) + result # line doesn't work for some reason
            result += COMMENT( '/'+func.__name__ )
            #result += COMMENT( 'PrettyDevHTML End' ) # line works but redundant because starting line doesn't
            result = PRETTY( result )
        return result
    return func_wrapper




Den torsdagen den 18:e september 2014 kl. 12:56:01 UTC+2 skrev Robin Manoli:
Sorry for a late reply!

How would I implement this? What I would like to do is to render pretty html in development mode (I have a global variable development_mode = True). Would I have to render the views myself? It would really be nice if I somewhere could just tell web2py in one place to render all views like that, or perhaps it would be better if I could decorate a controller with it (how?)?

Den tisdagen den 29:e april 2014 kl. 22:21:21 UTC+2 skrev aleon...@gmail.com:

Robin Manoli

unread,
Sep 18, 2014, 8:19:09 AM9/18/14
to web...@googlegroups.com
Using this function looks nice, but it does create some extra line breaks between each tag, that would be nice to get rid of if possible :)


Den tisdagen den 29:e april 2014 kl. 22:21:21 UTC+2 skrev aleon...@gmail.com:
Reply all
Reply to author
Forward
0 new messages