我向Django的模板传递一个函数,它返回一些记录。 我想调用这个函数并迭代它的结果。
{% for item in my_func(10) %}
这不起作用。 我试图将函数的返回值设置为变量并迭代变量,但似乎无法在Django模板中设置变量。
有没有正常的方法呢?
答案 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的其他任何部分都不会受到您使用的模板的影响,因为它是故意的单向过程。如果需要,您甚至可以在同一个项目中使用许多不同的模板系统。