将参数传递给Django模板中的模型方法

时间:2015-02-14 07:34:36

标签: django

我正在尝试从指定的业务中获取所有客户,但在Customer模型中有一个类方法来获取基于相同业务的一些信息...让我用代码解释一下......

class Business(models.Model):
    ...
    customers = models.ManyToManyField(Customer, blank=True, null=True)

class Customer(models.Model):
    ...
    def get_something(self, obj_business)
        ...

现在好了,在我的观点中,我得到了来自指定业务的所有客户:

obj_customers = obj_business.customers.all()

然后我尝试在我的模板中打印它:

{% for obj_customer in obj_customers %}
    {{ obj_customer.get_something ....... }}

但是,是的,没有办法传递论据......我想知道是否有某些东西我不知道......

我想知道是否有其他解决方案而不是创建模板标记...因为它是一个ManyToManyField,如果 customers 字段只是ForeignKey,则不需要将参数传递给该方法。

2 个答案:

答案 0 :(得分:21)

您可以创建一个简单的模板标记来调用任何带有任何参数的方法:

from django import template

register = template.Library()

@register.simple_tag
def call_method(obj, method_name, *args):
    method = getattr(obj, method_name)
    return method(*args)

然后在你的模板中:

{% call_method obj_customer 'get_something' obj_business %}

但是,当然,专门模板标签的装箱更安全: - )

@register.simple_tag
def get_something(customer, business):
    return customer.get_something(business)

模板:

{% get_something obj_customer obj_business %}

答案 1 :(得分:2)

您不能将参数传递给Django模板中的函数。

相反,您可以编写自己的template tag

以下是一些例子:

https://github.com/miohtama/LibertyMusicStore/blob/master/tatianastore/templatetags/content.py