【问题标题】:Passing Params to Django Model Methods将参数传递给 Django 模型方法
【发布时间】:2011-08-22 17:44:06
【问题描述】:

在 Django 模型中,将参数传递给方法并在代码中使用它很容易。

Class Foo(models.Model):
    number = IntegerField()
    ...
    def bar(self, percent):
        return self.number * percent

f = Foo(number=250)
f.bar(10)

问题是如何在模板层做到这一点?类似于: {{ foo.bar(10) }}

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

    只需在视图中进行此计算,而不是在模板中。

    这往往是很多“模板语言不能做X”问题的解决方案。

    查看

    foo = Foo(number=250)
    foo.bar = foo.bar(10) 
    return direct_to_template(request, "foo.html", {'foo': foo})
    

    模板

    {{ foo.bar }}
    

    【讨论】:

    • 我的问题通常很笼统。
    【解决方案2】:

    简单的答案是您不能这样做,这是设计使然; Django 模板旨在防止您在其中编写真正的代码。相反,您必须write a custom filter,例如

    @register.filter
    def bar(foo, percent):
        return foo.bar( float(percent) )
    

    这将使您可以拨打{{ foo|bar:"250" }} 之类的电话,这在功能上与您的{{ foo.bar(250) }}(非工作示例)相同。

    【讨论】:

    • 过滤器看起来是个好主意。我的印象是,在幕后,Django 模板以某种方式将这些参数转换为过滤器,但似乎必须手动完成,这仍然很酷。
    【解决方案3】:

    按照设计,Django 模板不允许您直接调用方法,因此您必须创建一个 custom template tag 来执行您想要的操作。

    Jinja2 模板确实允许您调用方法,因此您可以将integrating Jinja2 with Django 作为另一种选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多