我希望在Django模板中实现类似的功能。
{{ variable.function(parameter) }}
其中variable
是通过上下文传递给模板的变量,在本例中是模型的实例。
我尝试了不同的方法,但似乎没有人工作。
答案 0 :(得分:0)
没有办法做到这一点。 您可以创建另一个变量并将其传递给上下文,以便您可以使用它。 喜欢:
context['result'] = variable.function(parameter)
在您看来。 在您的模板中: {{result}}
答案 1 :(得分:0)
这在Django模板中是不可能的:它们是故意削弱的,以防止模板设计者在脚下拍摄自己。原因是模板中唯一的逻辑应该是表示逻辑,所有业务逻辑都应该保存在视图中。有些人认为这是公平的,有些人认为它有点居高临下(那些愚蠢的模板设计师不够聪明,不能安全地使用函数和方法)。
我可以想到3个选择:
我不会解释如何使用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 }}
。