Yes this is a much better design pattern. I will just make a file of these helpers and include them all at once.
Thanks massimo! On Sep 9, 10:32 pm, Massimo Di Pierro <[email protected]> wrote: > Why not do: > > in friend_selector.html > > {{def selector(id=None):}} > <div class="friend_selector"> > <div class="access_photos" users="[]"></div> > <input {{if id:}}id="{{=id}}"{{pass}} > name="access_input" > class="access_input" size="30" type="text" value="" /> > </div> > {{return}} > > and in the extending view {{include 'friend_selector.html'}} > {{selector(id='main-access')}} > > This is already supported and allows to define more than one function > in include. And it is more pythonic. > > On Sep 9, 10:12 pm, Michael Toomim <[email protected]> wrote: > > > > > > > > > I frequently write short snippets of HTML that I want to replicate in > > many places, like: > > > <div class="friend_selector"> > > <div class="access_photos" users="[]"></div> > > <input id="main_access_input" name="access_input" > > class="access_input" size="30" type="text" value="" /> > > </div> > > > So I can put this into a .html file "friend_selector.html", and then > > include it whenever I need this. But I often need to parameterize it. > > For instance, I might want to set a different id each time. > > > So I do it like this: > > > {{vars = {id : 'main_access_input'} }} > > {{include 'friend_selector.html'}} > > {{vars = {} }} > > > And then parameterize my html like this: > > > <div class="friend_selector"> > > <div class="access_photos" users="[]"></div> > > <input {{if > > vars['id']:}}id="{{=vars['id']}}"{{pass}} > > name="access_input" class="access_input" size="30" type="text" > > value="" /> > > </div> > > > Basically, I'm re-inventing a function call via the {{include}} > > feature. Wouldn't it be awesome if this just happened automatically??? > > Like this: > > > {{include 'friend_selector.html' (id='main_access_input')}} > > > Would you like this feature? Does this sound hard to implement? > > > Appendix: > > 1. You can also do this I think with template inheritance, but that's > > just complicated. Or you could define and call parameterized functions > > in python, but editing embedded html in python strings is gross. > > 2. The (id='main_access_input') part would ideally be a full python- > > style parameter list, supporting e.g. (a=1, b=3). This is simpler to > > implement. But to support positional args, like (1,3,5, a=1), the html > > blocks would need to declare their supported parameters. They could do > > so with by including a "declare" snippet like this: > > > {{ declare (a, b, c, id=None): }} > > <div class="friend_selector"> > > <div class="access_photos" users="[]"></div> > > <input {{if id:}}id="{{=id}}"{{pass}} > > name="access_input" > > class="access_input" size="30" type="text" value="" /> > > </div>

