Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass an argument to a method on a template variable in Django?

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 .


2 Answers

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.

like image 144
Ned Batchelder Avatar answered Sep 15 '25 07:09

Ned Batchelder


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?

like image 34
Joe Avatar answered Sep 15 '25 07:09

Joe