I had a really strange bug in one of my custom template tags today. It took me the entire morning to figure it out, but I finally did. I'm not sure if it's a bug or a feature, but I wanted to make a post to help the next person who has this same problem.
Let's pretend you make a custom template tag foo. The render method for foo is in a class FooNode, and you pass it a person from the context. {% foo persona %} {% foo personb %} Then, as is common, you have a list of people that you render with a loop in the template. {% for person in people %} {% foo person %} {% endfor %} It turns out that when a template tag stands alone, the __init__ of FooNode will be called each time the template tag appears. However, when the template tag is inside of a loop, the __init__ of the FooNode is only called once. That single instance of FooNode sticks around, and it's render method is called over and over as the loop goes around. This doesn't seem like that big of a deal. However, my template tag was written in such a way that data members of FooNode were being set in the __init__ and reused in the render(). Because the initialization only happened the first time through the loop, the template tag always rendered as if it was for the first person in the list. Those data members carried over to subsequent renders because the Node was not reinitialized. I managed to fix it, but be aware. If your template tags are behaving strangely when they are in loops, this is probably the issue. -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-develop...@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.