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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---