在Django模型中,将param传递给方法并在代码中使用它很容易。
Class Foo(models.Model):
number = IntegerField()
...
def bar(self, percent):
return self.number * percent
f = Foo(number=250)
f.bar(10)
问题是如何在模板层中完成?像这样的东西:
{{ foo.bar(10) }}
答案 0 :(得分:4)
简单的答案是你不能这样做,这是设计的; Django模板旨在阻止您在其中编写实际代码。相反,你必须write a custom filter,例如
@register.filter
def bar(foo, percent):
return foo.bar( float(percent) )
这可以让您拨打{{ foo|bar:"250" }}
之类的电话,其功能与{{ foo.bar(250) }}
的(非工作示例)相同。
答案 1 :(得分:1)
根据设计,Django模板不允许您直接调用方法,因此您必须创建custom template tag来执行您想要的操作。
Jinja2模板允许您调用方法,因此您可以将integrating Jinja2 with Django视为另一种选择。
答案 2 :(得分:0)
只需在视图中进行此计算,而不是模板。
这往往是解决许多“模板语言不能做X”的问题。
foo = Foo(number=250)
foo.bar = foo.bar(10)
return direct_to_template(request, "foo.html", {'foo': foo})
{{ foo.bar }}