将Params传递给Django模型方法

时间:2011-05-10 19:00:31

标签: django django-models django-templates

在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) }}

3 个答案:

答案 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 }}