views:

357

answers:

3

I am using the lxml library to define a variable (category) in a view. lxml provides a method .get to retrieve custom attributes. I'd like to use it in the template like so:

{{ category.get("foo") }}

I know that when using template variables it is unnecessary to use parenthesis, but I get the following error:

{{ category.get "foo" }}

Could not parse the remainder: ' "foo"' from 'category.get "foo"'

I'm assuming that there is something wrong with my syntax but google has been no help. The django docs say that methods are looked up by using a '.'

+4  A: 

You can't pass an argument to a callable attribute like this. Either pull the value in the view, or write a custom template tag to do it.

Ned Batchelder
Is there any way to have access to other variables, like the current request (i.e. request.user) or the current context object?
slacy
A: 

Here I wrote a hack to call a function and pass the arguments http://www.sprklab.com/notes/13-passing-arguments-to-functions-in-django-template/

Pavel
A: 

I agree with the philosophy of separating logic from design, but there's an exception. I am currently writing a get_image(height=xxx, width=xxx) method for a model. Clearly, it should be up to the template designer to decide the size of the image as the last stage. Though I suppose the correct thing to do is write a custom tag, but why restrict?

Joe