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>