2016-08-18 6 views
0

Kann mir jemand sagen, ob es möglich ist, mehrere Variablen von Feldnamen zu einem Template-Tag zu senden?Django Vorlage, senden Sie zwei Argumente zu Template-Tag?

Diese Frage How do I add multiple arguments to my custom template filter in a django template? ist fast da, aber ich weiß nicht, wie ich meine zwei Feldnamen als Zeichenfolge senden.

meine Vorlage:

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

die oben nicht funktioniert hat

meine Vorlage tags:

@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 

Antwort

1

Aus meiner Sicht ist es einfacher, sieht statt einer Vorlage einen einfachen Tag zu verwenden Filter, so dass Sie es aufrufen können, ohne eine Zeichenfolge senden zu müssen.

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

Ihre Vorlage wäre nur:

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

und der Template-Tag wäre:

@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

ist nicht bewusst einfachen Tag! Ich bekomme jedoch einen Fehler, wenn ich ein einfaches Tag benutze ... " Ungültiges Block-Tag in Zeile 206: 'resting_cost', erwartet 'elif', 'else' oder 'endif'. Haben Sie vergessen, dieses Tag zu registrieren oder zu laden? \t \t \t {% remaining_cost item.cost_per_month item.install_date item.comtract_length%} – AlexW

+0

Leider habe ich vergessen. Sie haben {% Last %} setzen –

+0

an der Spitze der Vorlage –

Verwandte Themen