我想从我的模型中调用一个函数,比如:
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条答案
按热度按时间q43xntqr1#
不能使用模板中的参数调用函数。只能在视图中调用。或者,可以编写一个自定义模板过滤器,如下所示:
现在您可以在模板中执行以下操作:
nukf8bse2#
如果该方法不需要任何参数,则可以使用@property装饰器并在模板中正常访问它。
xurqigkl3#
对于大于1的参数,使用简单标记:
模板:
{{
到{%
的变化)*可以接受位置参数(例如
related_deltas i 3 second_arg=4 debug=true
)。k4aesqcs4#
如果你发现到处都有太多的属性,或者你写的每一个方法都有一个模板过滤器,IRC上的thanks @FunkyBob建议了另一个解决方案。这有点好,呃,时髦,但在某些情况下是不错的。
k3bvogb15#
另一个选项是定义属性。请参阅https://web.archive.org/web/20160407103752/http://adam.gomaa.us/blog/2008/aug/11/the-python-property-builtin/。
你可以编写一个可以做任何事情的函数,把它设为只读属性,从模板中调用该属性。
就这样!!!!