Django模板系统中在模型内调用函数
我想在模板中调用我模型里的一个函数,像这样:
class ChannelStatus(models.Model):
..............................
..............................
def get_related_deltas(self,epk):
mystring = ""
if not self.get_error_code_delta(epk):
return mystring
else:
for i in self.get_listof_outage():
item = i.error_code.all()
for x in item:
if epk == x.id:
mystring= mystring +" "+str(i.delta())
return mystring
然后当我想从模板中调用这个函数时,假设在渲染的时候,我传入了 channel_status_list 作为参数:
channel_status_list = ChannelStatus.objects.all()
{% for i in channel_status_list %}
{{ i.get_related_deltas(3) }}
{% endfor %}
但是这样不行,我可以调用一个不需要任何参数的函数,但如果函数有参数,我就不知道该怎么做了。
谢谢!
5 个回答
10
如果你有超过一个参数,可以使用 简单标签:
@register.simple_tag
def related_deltas(obj, epk, second_arg):
return obj.get_related_deltas(epk, second_arg)
模板:
{% for i in channel_status_list %}
{% related_deltas i 3 4 %}
{% endfor %}
(注意语法的变化,从 {{
改为 {%
)
可以接受位置参数(比如 related_deltas i 3 second_arg=4 debug=true
)。
42
如果这个方法不需要任何参数,你可以使用@property装饰器,然后在模板中像平常一样访问它。
class ChannelStatus(models.Model):
...
@property
def function_you_want_as_property(self):
mystring = ""
...
97
你不能在模板中直接调用带参数的函数。你只能在视图中这样做。另一种方法是你可以写一个自定义模板过滤器,它可能看起来像这样:
@register.filter
def related_deltas(obj, epk):
return obj.get_related_deltas(epk)
这样你就可以在模板中这样使用了:
{% for i in channel_status_list %}
{{ i|related_deltas:3 }}
{% endfor %}