如何在django模板中使用参数调用变量函数?

时间:2017-12-01 02:10:42

标签: django

我希望在Django模板中实现类似的功能。

{{ variable.function(parameter) }}

其中variable是通过上下文传递给模板的变量,在本例中是模型的实例。 我尝试了不同的方法,但似乎没有人工作。

2 个答案:

答案 0 :(得分:0)

没有办法做到这一点。 您可以创建另一个变量并将其传递给上下文,以便您可以使用它。 喜欢:

context['result'] = variable.function(parameter) 

在您看来。 在您的模板中: {{result}}

答案 1 :(得分:0)

这在Django模板中是不可能的:它们是故意削弱的,以防止模板设计者在脚下拍摄自己。原因是模板中唯一的逻辑应该是表示逻辑,所有业务逻辑都应该保存在视图中。有些人认为这是公平的,有些人认为它有点居高临下(那些愚蠢的模板设计师不够聪明,不能安全地使用函数和方法)。

我可以想到3个选择:

  1. 使用jinja2代替。
  2. 编写自定义模板过滤器。
  3. 保留Django设计师认为你应该保留它的视图中的所有逻辑。
  4. 我不会解释如何使用Jinja2,因为它是already explained in the docs,因为如果你切换到它而不是原生的Django模板,问题中的例子会逐字逐句。这只适用于Jinja2:

    {{ variable.function(parameter) }}
    

    现在模板过滤解决方案:首先您必须遵循code layout convention。过滤器本身就是这样的:

    # at your_tag_library.py
    @register.filter(name='call_with')
    def apply_callable(callable, arg):
        return callable(arg)
    

    然后在模板中你可以这样做:

    {% load your_tag_library %}
    
    {{ variable.function|call_with:parameter }}
    

    当然最后一个选项是Daniel的答案 - 预先计算视图中的值,只显示模板中的结果:

    context['result'] = variable.function(parameter) 
    

    在您的模板中,您只需要{{ result }}