Nice info. This was just asked on the IRC channel a couple nights ago. I'll be sure to pass it on.
Michael Trier blog.michaeltrier.com On Dec 5, 2007 7:09 PM, Michal Ludvig <[EMAIL PROTECTED]> wrote: > > Michal Ludvig wrote: > > > for the project I'm working on I needed to create a custom template tag, > > call it 'mytag'. > > > > If I use it as {% mytag something %} everything goes fine (where > > 'something' is a string passed to the template). > > However I can't add any filters to that 'something'. As soon as I do: > > {% mytag something|upper %} > > I get an exception: > > VariableDoesNotExist at /test/ > > Failed lookup for key [something|upper] > > > > That leads to a code in MytagNode.render() method: > > actual_message = resolve_variable(self.message, context) > > where self.message is the argument passed to the macro, in this case > > it's a string 'something|upper'. > > > > Is there an easy way to run all the attached filters in MytagNode? > > For the record: > There is a FilterExpression class in django.template that does exactly > what I need. So for the tag implementation, instead of: > > === > from django.template import resolve_variable > > @register.tag > def mytag(parser, token): > tag_name, message = token.split_contents() > [...] > return MytagNode(message) > > class MytagNode(template.Node): > [...] > def render(self, context): > actual_message = resolve_variable(self.message, context) > [...] > === > > I do it like this: > > === > from django.template import FilterExpression > > @register.tag > def mytag(parser, token): > [...] > filter_expression = FilterExpression(message, parser) > return MytagNode(filter_expression) > > class MytagNode(template.Node): > [...] > def render(self, context): > actual_message = self.filter_expression.resolve(context) > [...] > === > > The filter_expression.resolve(context) runs all the filters attached to > the variable and things work as expected. The 'parser' argument even > makes it aware of custom filters loaded through {% load ... %} tags. > > Lesson learned, note taken. > > Michal > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---