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
-~----------~----~----~----~------~----~------~--~---

Reply via email to