我有一个场景,我必须将函数的输出传递给Django自定义过滤器。考虑对象:
class Money(object):
def __init__(self, amount):
self.amount = amount
class ConversionRate(object):
def GetEuroRate(self):
... some calculation and return a float value.
def GetGBPRate(self):
... some calculation and return a float value.
..... more functions.
我已将货币和转换率实例作为上下文变量传递。我试图通过不同的转换率。在这个例子中,'money'和'conversion_rate'是分别用于引用Money对象和ConversionRate对象的上下文变量。
{{ money|convert:conversion_rate.GetEuroRate }}
我的过滤器代码:
@register.filter
def convert(first_value, second_value):
"""Returns the product to two numbers."""
return float(first_value * float(second_value)
在我的自定义过滤器中,conversion_rate.GetEuroRate()
始终返回0而不是实际值。有没有办法传递函数的输出?
谢谢,
卡尔蒂克
答案 0 :(得分:1)
我复制了你的类和过滤器,以下内容对我有用:
#template_additions.py
from django import template
register = template.Library()
@register.filter
def convert(value, conversion_rate):
return float(value * conversion_rate)
#models.py
class Money(object):
def __init__(self, amount):
self.amount = amount
class ConversionRate(object):
def __init__(self, euro_rate):
self.euro_rate = euro_rate
def euro_rate(self):
return float(self.euro_rate)
#views.py
from django.shortcuts import render
from your_app.models import Money, ConversionRate
def test(request):
money = Money(amount=100)
conversion_rate = ConversionRate(euro_rate=0.90)
return render(request, 'test.html', {'money' : money,
'conversion_rate' : conversion_rate})
#test.html
{% load template_additions %}
{{ money.amount|convert:conversion_rate.euro_rate }}
输出: 90