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

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

{% for item in my_func(10) %}

没用的。 我尝试将函数的返回值设置为一个变量,并在该变量上迭代,但似乎没有办法在 Django 模板中设置变量。

有什么正常的方法吗?

136599 次浏览

不能将需要模板参数的函数调用为模板标记或筛选器。

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

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


我试过将 function 的返回值设置为一个变量,并对变量进行迭代,但似乎没有办法在 Django 模板中设置变量。

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

根据设计,Django 模板不能调用任意的 Python 代码。对于设计人员编写模板的环境来说,这是一个安全性和安全性特性,它还可以防止业务逻辑迁移到模板中。

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

如果你有一个对象,你可以把它定义为 @property,这样你就可以不用调用就能得到结果,例如。

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

然后在模板中:

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

您可以做的是,创建“函数”作为另一个模板文件,然后包含将参数传递给它的文件。

在 index.html 中

<h3> Latest Songs </h3>
{% include "song_player_list.html" with songs=latest_songs %}

Inside song _ player _ list. html

<ul>
{%  for song in songs %}
<li>
<div id='songtile'>
<a href='/songs/download/\{\{song.id}}/'><i class='fa fa-cloud-download'></i>&nbsp;Download</a>


</div>
</li>
{% endfor %}
</ul>