Передача параметров в методы модели Django - PullRequest
3 голосов
/ 10 мая 2011

В модели 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) }}

Ответы [ 3 ]

4 голосов
/ 10 мая 2011

Простой ответ заключается в том, что вы не можете сделать это, что задумано;Шаблоны Django предназначены для того, чтобы удерживать вас от написания реального кода в них.Вместо этого вам нужно написать собственный фильтр , например,

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

. Это позволит вам сделать вызов, подобный {{ foo|bar:"250" }}, который будет функционально идентичен вашему (нерабочему).пример) из {{ foo.bar(250) }}.

1 голос
/ 10 мая 2011

Шаблоны Django не позволяют напрямую вызывать методы, поэтому вам нужно создать пользовательский тег шаблона , чтобы делать то, что вы хотите.Шаблоны

Jinja2 позволяют вам вызывать методы, поэтому вы можете рассмотреть интеграцию Jinja2 с Django в качестве другого варианта.

0 голосов
/ 11 мая 2011

Просто сделайте этот расчет в представлении, а не в шаблоне.

Это часто решение многих проблем "язык шаблонов не может сделать X".

представление

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

шаблон

{{ foo.bar }}
...