2016-08-18 99 views
0

任何人都可以告诉我,如果它可能发送多个变量从字段名称模板标签?Django模板,发送两个参数给模板标签?

这个问题How do I add multiple arguments to my custom template filter in a django template?几乎在那里,但我不知道如何发送我的两个字段名称作为一个字符串。

我的模板:

<th>{{ item.cost_per_month|remaining_cost:item.install_date + ',' + item.contract_length }}</th> 

以上没有工作

我的模板标签:

@register.filter('contract_remainder') 
def contract_remainder(install_date, contract_term): 
    months = 0 
    now = datetime.now().date() 
    end_date = install_date + relativedelta(years=contract_term) 

    while True: 
     mdays = monthrange(now.year, now.month)[1] 
     now += timedelta(days=mdays) 
     if now <= end_date: 
      months += 1 
     else: 
      break 
    return months  

@register.filter('remaining_cost') 
def remaining_cost(cost_per_month, remainder_vars): 
    dates = remainder_vars.split(',') 
    cost = contract_remainder(dates[0], dates[1]) * cost_per_month 
    return cost 

回答

1

从我的角度来看,它看起来更容易使用一个简单的标签,而不是一个模板过滤器,以便您可以调用它而不需要发送字符串。

https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/#simple-tags

你的模板将只是:

<th>{% remaining_cost item.cost_per_month item.install_date item.comtract_length<th> %} 

和模板标签是:

@register.simple_tag 
def remaining_cost(cost_per_month, install_date, contract_length): 
    cost = contract_remainder(install_date, contract_length) * cost_per_month 
    return cost 
+0

wasnt意识到简单的标签!然而,当我使用简单的标签时,出现错误...“ 第206行上的无效块标签:'remaining_cost',预计'elif','else'或'endif'您忘记了注册或加载此标签吗? \t \t \t​​{%remaining_cost item.cost_per_month item.install_date item.comtract_length%} – AlexW

+0

对不起,我忘了。你必须把{%负载%} –

+0

在模板 –