As my application's views have become more complex, I've also been considering the same questions concerning Python vs HTML coding. I've tried using the helpers but my brain finds the stacks of parentheses even more confusing than HTML closing tags. Currently, I'm defining functions in my views that encapsulate frequently used blocks of HTML in triple-quoted strings. I use standard python dictionary substitution, %(name)s to inject parameters. Here's a relatively simple example.
def responseslider(inp,inpid,label): inpval = inp['_value'] html = """ <li class=respond.slider> <table class=respond> <tr> <td class="inset"></td> <td> <div class="slider_wrapper"> %(inp)s <div id="slider_%(inpid)s" ></div> <span id="slider_%(inpid)s_val">% (inpval)s</span> </div> </td> <td>%(label)s</td> </tr> </table> </li> """%locals() return XML(html) This seems, for my application at least, to be the best approach I've found so far. One thing that's occurred to me is how nice it would be if we could use python-style indentation instead of closing tags when writing HTML in views. So in the example above, suppose the HTML could be simplified to: <li class=respond.slider> <table class=respond> <tr> <td class="inset"> <td> <div class="slider_wrapper"> %(inp)s <div id="slider_%(inpid)s" > <span id="slider_%(inpid)s_val">% (inpval)s <td>%(label)s The indentation rules would be similar to Python's. Any opening tag would behave like colon-terminated python conditional; the parser would defer generating a closing tag until the indentation level returned to the original level. I believe there would be no ambiguity as long as the indentation is correct, but perhaps there's a case I haven't thought of. I searched to see if someone has done something like this before but so far haven't found anything. I think it's worth noting that when HTML came into being in the late 80's the universe of digital documents contained a lot of text files that just needed a little markup to render them more attractively -- so a language with closing tags made sense because the ratio of markup to text was very low and transmission bandwidth was limited. Nowadays the situation is largely the opposite. Most web pages are mostly markup because users have come to expect very high-quality presentation. The markup to text ratio in a typical page from the online web2py book -- surely a text-heavy document as web pages go -- is more than 5 to 1. It's clear that, as web authors, we need all the help we can get. Cheers, Mike On Aug 4, 5:16 am, Phyo Arkar <phyo.arkarl...@gmail.com> wrote: > Current way is good enough , it gives programmers choices. > Many of us want to code in HTML as Long as they are static > . > May be pure python templating system which can be enable from response.view > > > > On Wed, Aug 4, 2010 at 3:40 PM, mdipierro <mdipie...@cs.depaul.edu> wrote: > > This is a good point. > > > to do it with the current web2py the code at best would look like > > this: > > > Stef Mientki > > View profile Translate to Translated (View Original) > > More options Aug 4, 3:39 am > > From: Stef Mientki <stef.mien...@gmail.com> > > Date: Wed, 04 Aug 2010 10:39:48 +0200 > > Local: Wed, Aug 4 2010 3:39 am > > Subject: this must be asked a 1000 times, but I couldn't find the > > answer > > Reply | Reply to author | Forward | Print | Individual message | Show > > original | Remove | Report this message | Find messages by this author > > please forgive my ignorance, > > but I wonder why views are not written in Python, instead of html > > ( see comparison below of te first > > part of default\index.html. > > > The advantage of using Python: > > - the user can stick to 1 language > > - no redundant information in the closing tags, like <ul> , </ul> > > - most editors checks the closing brackets > > - normal indentation, no problems with missing "pass" > > The disavantages of using Python: > > - ??? > > > thanks, > > Stef Mientki > > > {{extend 'layout.html' }} > > {{ > > if 'message' in globals () : > > =H2 ( message ) > > else: > > =BEAUTIFY ( response._vars ) > > pass > > > = HR () > > = H1 ( 'README' ) > > = UL ( > > LI ( T ( 'You are successfully running web2py' ) ), > > LI ( T ( 'This is a copy of the scaffolding application' ) ), > > LI ( T ( 'You can modify this application and adapt it to your > > needs' ) ), > > LI ( T ( A ( B ( T ( "click here for the administrative > > interface")), > > __href = URL ( 'admin', 'default', 'index' ) ) )) ), > > LI ( A ( T ( "click here for online examples"), > > _href = URL ( 'examples', 'default', 'index' ) ) ), > > '...') > > }} > > > I.e. > > - extend, include, block and pieces of code must be between different > > sets {{...}}. > > - printed values must have the = prefix > > - close blocks with pass > > > Removing completely the {{...}} and "=" would require some changes in > > the template system. > > I guess it could be an option. > > > On Aug 4, 3:39 am, Stef Mientki <stef.mien...@gmail.com> wrote: > > > please forgive my ignorance, > > > but I wonder why views are not written in Python, instead of html ( see > > comparison below of te first > > > part of default\index.html. > > > > The advantage of using Python: > > > - the user can stick to 1 language > > > - no redundant information in the closing tags, like <ul> , </ul> > > > - most editors checks the closing brackets > > > - normal indentation, no problems with missing "pass" > > > The disavantages of using Python: > > > - ??? > > > > thanks, > > > Stef Mientki > > > > # *************************************************************** > > > extend ( 'layout.html' ) > > > > if 'message' in globals () : > > > H2 ( message ) > > > else: > > > DISPLAY ( BEAUTIFY ( response._vars ) ) > > > > HR () > > > H1 ( 'README' ) > > > UL ( > > > LI ( T ( 'You are successfully running web2py' ) ), > > > LI ( T ( 'This is a copy of the scaffolding application' ) ), > > > LI ( T ( 'You can modify this application and adapt it to your needs' ) > > ), > > > LI ( T ( A ( B ( T ( "click here for the administrative interface")), > > > _HREF ( URL ( 'admin', 'default', 'index' ) ) ) ) ), > > > LI ( A ( T ( "click here for online examples"), > > > _HREF ( URL ( 'examples', 'default', 'index' ) ) ) ), > > > LI ( HREF ( "http://web2py.com", 'web2py.com' ) ), > > > LI ( HREF ( "http://web2py.com/book", T ( 'documentation' ) ) ) ) > > > > # *************************************************************** > > > {{extend 'layout.html'}} > > > > {{if 'message' in > > globals():}}{{=H2(message)}}{{else:}}{{=BEAUTIFY(response._vars)}}{{pass}} > > > > <hr /> > > > <h1>README</h1> > > > <ul> > > > <li>{{=T('You are successfully running web2py')}}</li> > > > <li>{{=T('This is a copy of the scaffolding application')}}</li> > > > <li>{{=T('You can modify this application and adapt it to your > > needs')}}</li> > > > <li>{{=A(B(T("click here for the administrative interface")), > > > _href=URL('admin','default','index'))}}</li> > > > <li>{{=A(T("click here for online examples"), > > _href=URL('examples','default','index'))}}</li> > > > <li><a href="http://web2py.com">web2py.com</a></li> > > > <li><a href="http://web2py.com/book">{{=T('documentation')}}</a></li> > > > </ul>