我正在尝试从指定的业务中获取所有客户,但在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,则不需要将参数传递给该方法。
答案 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