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 <too...@gmail.com> 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>

Reply via email to