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

84 投票
5 回答
153230 浏览
提问于 2025-04-15 20:33

我在把一个函数传给Django的模板,这个函数会返回一些记录。 我想调用这个函数,然后遍历它的结果。

{% for item in my_func(10) %} 

但是这样不行。 我试过把函数的返回值放到一个变量里,然后遍历这个变量,但在Django模板里似乎没有办法设置变量。

有没有什么正常的方法可以做到这一点呢?

5 个回答

14

Django的模板设计上不允许随便调用Python代码。这是为了安全考虑,特别是在设计师编写模板的环境中,这样可以防止业务逻辑混入模板中。

如果你想要实现这个功能,可以考虑使用Jinja2模板(http://jinja.pocoo.org/docs/)或者其他支持这种功能的模板系统。你使用的模板不会影响Django的其他部分,因为这个过程是单向的。如果你愿意,甚至可以在同一个项目中使用多种不同的模板系统。

30

如果你有一个对象,你可以用 @property 来定义它,这样你就可以直接获取结果,而不用特别去调用它,比如:

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

然后在模板中:

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

在模板中,你不能直接调用需要参数的函数。你可以写一个模板标签或过滤器来解决这个问题。

撰写回答