如何调用在Django模板中接受参数的函数?

时间:2010-03-18 09:53:38

标签: python django function variables django-templates

我向Django的模板传递一个函数,它返回一些记录。 我想调用这个函数并迭代它的结果。

{% for item in my_func(10) %} 

这不起作用。 我试图将函数的返回值设置为变量并迭代变量,但似乎无法在Django模板中设置变量。

有没有正常的方法呢?

4 个答案:

答案 0 :(得分:57)

您不能在模板中调用需要参数的函数。 Write代替模板标记或过滤器。

答案 1 :(得分:19)

如果您有一个对象,则可以将其定义为@property,这样您就可以在没有通话的情况下获得结果,例如

class Item:
    @property
    def results(self):
        return something

然后在模板中:

<% for result in item.results %>
...
<% endfor %>

答案 2 :(得分:10)

  

我正在向Django的模板传递一个函数,它返回一些记录

为什么不向Django模板传递变量存储函数的返回值,而不是函数?


  

我试图将fuction的返回值设置为变量并迭代变量,但似乎无法在Django模板中设置变量。

您应该在Django视图中设置变量而不是模板,然后将它们传递给模板。

答案 3 :(得分:4)

按照设计,Django模板不能调用任意Python代码。这是设计人员编写模板的环境的安全和安全功能,它还可以防止业务逻辑迁移到模板中。

如果你想这样做,你可以切换到使用Jinja2模板(http://jinja.pocoo.org/docs/),或任何其他你支持的模板系统。 django的其他任何部分都不会受到您使用的模板的影响,因为它是故意的单向过程。如果需要,您甚至可以在同一个项目中使用许多不同的模板系统。