我正在尝试从指定的业务中获取所有客户,但在Customer模型中有一个类方法来获取基于相同业务的一些信息...让我用代码解释一下......
class Business(models.Model):
...
customers = models.ManyToManyField(Customer, blank=True, null=True)
class Customer(models.Model):
...
def get_something(self, obj_business)
...
Run Code Online (Sandbox Code Playgroud)
好的,现在在我的观点中,我从这样的指定业务中获得所有客户:
obj_customers = obj_business.customers.all()
Run Code Online (Sandbox Code Playgroud)
然后我尝试在我的模板中打印它:
{% for obj_customer in obj_customers %}
{{ obj_customer.get_something ....... }}
Run Code Online (Sandbox Code Playgroud)
但是,是的,没有办法传递论据......我想知道是否有一些我遗漏的东西......
我想知道是否有另一个解决方案而不是创建模板标签...因为它是一个ManyToManyField,如果customers字段只是ForeignKey,则不需要将参数传递给该方法......
cat*_*ran 24
您可以创建一个简单的模板标记来调用任何带有任何参数的方法:
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)
Run Code Online (Sandbox Code Playgroud)
然后在你的模板中:
{% call_method obj_customer 'get_something' obj_business %}
Run Code Online (Sandbox Code Playgroud)
但是,当然,专门模板标签的装箱更安全:-)
@register.simple_tag
def get_something(customer, business):
return customer.get_something(business)
Run Code Online (Sandbox Code Playgroud)
模板:
{% get_something obj_customer obj_business %}
Run Code Online (Sandbox Code Playgroud)
您无法将参数传递给 Django 模板中的函数。
相反,您可以编写自己的模板标记。
这里有些例子:
https://github.com/miohtama/LibertyMusicStore/blob/master/tatianastore/templatetags/content.py
| 归档时间: |
|
| 查看次数: |
19570 次 |
| 最近记录: |