I needed something like this to repeat a part of the template x times,
but I couldn't get this to work, the filter repeatedly returned the
range(0,10) so gave a recursion depth error. I may have set it up
wrong.

I ended up making a repeat tag:

def do_repeat(parser, token):
        try:
                # Splitting by None == splitting by spaces.
                tag_name, arg = token.contents.split(None, 1)
                number = int(arg)
        except ValueError:
                raise template.TemplateSyntaxError, "Repeat tag requires 
exactly one
argument which must be a number"
        nodelist = parser.parse(('endrepeat',))
        parser.delete_first_token()
        return RepeatNode(nodelist, number)

class RepeatNode(template.Node):
        def __init__(self, nodelist, number):
                self.nodelist = nodelist
                self.number = number
        def render(self, context):
                output = self.nodelist.render(context)
                return output*self.number
register.tag('repeat', do_repeat)

but it really feels like it shouldn't be that hard. Maybe I missed the
easy way?


On Apr 15, 7:31 pm, Michael <[EMAIL PROTECTED]> wrote:
> I feel like something like this already exists somewhere, but you can simply
> write a filter that turns a number into a range:
>
> so in your templates you would have:
>
> {% for i in 10|range %}
> ...
> {%endfor%}
>
> and your template filter would simply be:
>
> from django.template.defaultfilters import stringfilter
>
> @stringfilter
> def range(value): return range(int(value))
>
> On Tue, Apr 15, 2008 at 12:07 PM, Kenneth Gonsalves <[EMAIL PROTECTED]>
> wrote:
>
>
>
> > On 15-Apr-08, at 9:04 PM, Darryl Ross wrote:
>
> > > Duke wrote:
> > >> They are looping over a list
> > >> I am looking for
> > >> for (i = 0; i < 10; i++) {
> > >>      printf("Hello,  World!);
> > >> }
> > >> link for looping statement
>
> > > I am not aware of any tag that will allow you to do that, out of
> > > the box. You have two options, the first is to create a custom
> > > template tag that do what you want[1]. This shouldn't really be
> > > terribly difficult to do.
>
> > > The second option would be to just pass in a variable into the
> > > context with a list containing the number of items of the number of
> > > times you want to loop. Using generic views, this could be done in
> > > your urls.py like:
>
> > > ...
> > >  ('^$', 'direct_to_template',
> > >         { 'template_name': 'homepage.html',
> > >           'extra_context': {'looper': range(10) }})
> > > ...
>
> > > Then you can use the standard {% for %} tag:
>
> > > {% for i in looper %}
> > >   {{i}}
> > > {% endfor %}
>
> > > [1]http://www.djangoproject.com/documentation/templates_python/
> > > #extending-the-template-system
>
> > where is the use case for this? I cannot conceive of any situation
> > where one would want to loop over an arbitrary number.
>
> > --
>
> > regards
> > kg
> >http://lawgon.livejournal.com
> >http://nrcfosshelpline.in/code/
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to