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

cle*_*leg 50 python django variables function django-templates

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

{% for item in my_func(10) %} 
Run Code Online (Sandbox Code Playgroud)

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

有没有正常的方法呢?

Ign*_*ams 63

您无法在模板中调用需要参数的函数.改为编写模板标签或过滤器.

  • 很伤心.我想有一个更简单的方法. (87认同)
  • 这种悲伤正是我喜欢 React JSX 的原因。 (5认同)
  • 我认为内置python`@property`的解决方案是更好的解决方案,当然,这取决于具体情况。 (3认同)
  • @Andy,这是一个建设性且有帮助的评论吗?...你正在比较苹果和大象;或者如何从 React 中调用 Django 内部函数?(我假设您使用 API,但这根本不再是这个问题的范围) (2认同)

she*_*pya 19

如果你有一个对象,你可以定义它,@property这样你就可以在没有调用的情况下得到结果,例如

class Item:
    @property
    def results(self):
        return something
Run Code Online (Sandbox Code Playgroud)

然后在模板中:

<% for result in item.results %>
...
<% endfor %>
Run Code Online (Sandbox Code Playgroud)

  • `@property` 不会改变模板中调用方法的任何内容。您可以将其删除,模板示例仍将完全相同。Django 已经允许调用不带参数的方法。 (4认同)
  • python内置属性http://docs.python.org/2/library/functions.html#property (2认同)

dol*_*a33 10

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

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


我试图将函数的返回值设置为变量并迭代变量,但似乎没有办法在Django模板中设置变量.

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

  • 如果您希望懒惰地评估该功能,该怎么办?例如,如果需要,您希望结果可用,但您不想一无所知地计算结果?我想我一直在写模板标签.. (2认同)

Mar*_*cin 5

根据设计,Django模板无法调用任意Python代码。这是设计人员在其中编写模板的环境中的一项安全保护功能,它还可以防止业务逻辑迁移到模板中。

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