2015-11-13 72 views
1

我想多個參數傳遞給我的模板標籤:Django的 - 如何將多個值傳遞給templatetag

@register.filter 
def val_color(val, min_val): 
    if val >= min_val: 
     return 'red' 
    return 'black' 

模板:

{% for x in data.vals %} 
    <font color="x|data.min_val|val_color">x</font> 
{% endfor %} 

這種方法是行不通的。 任何想法如何做到這一點? 請注意,如果必須將x數字轉換爲具有值和min_val屬性的對象,那將太亂了,所以我希望這個問題有適當的解決方案。

+0

可能的重複http://stackoverflow.com/questions/420703/how-do-i-add-multiple-arguments-to-my-custom-template-filter-in- a-django-templat – jcfollower

回答

2

你不清楚你想做什麼。在您的功能中,我沒有看到min_val的任何用法。

但讓我舉一個例子說明過濾器是如何工作的。 這裏是例如過濾器標籤

@register.filter 
def keyvalue(dict, key): 
    """Filter to fetch a dict's value by a variable as key""" 
    return dict.get(key, '') 

使用過濾器標籤的

{{ weekday_dict|keyvalue:var }} 

這裏weekday_dict是字典和'var'關鍵是我要訪問。在keyvalue過濾器標籤中weekday_dict是第一個參數dict,var是第二個參數。

要傳遞多個參數,你可以參考link

總之你不能輕易地通過多個參數的過濾器標籤。你可以把它作爲逗號分隔值,或者使用多個過濾器將它們作爲在link

@register.filter(name='one_more') 
def one_more(_1, _2): 
    return _1, _2 

def your_filter(_1_2, _3) 
    _1, _2 = _1_2 
    print "now you have three arguments, enjoy" 

{{ _1|one_more:_2|your_filter:_3 }} 

更新由answeres的一個給定的: 正如我可以在你更新的問題可見。你並不需要通過多個參數 你的過濾器標記被定義爲:

@register.filter 
def val_color(val, min_val): 
    if val >= min_val: 
     return 'red' 
    return 'black' 

要使用這個標籤您可以更新您的模板代碼

{% for x in data.vals %} 
    <font color="{{ x|val_color:data.min_val }}">{{ x }}</font> 
{% endfor %} 

您還可以設置一些默認值,以第二參數,然後您不需要爲默認情況傳遞最小值。另外不要忘記在使用它們之前加載過濾器。有關標籤的更多詳細信息,請參閱link

+0

我更正了我的代碼。現在它應該是有道理的。 – max

+0

更新了我的答案,並解決了您的問題 –

+0

謝謝。上述解決方案的工作。我還發現了「簡單標籤」,這是爲了這個而不是使用過濾器,我用這個,也是有效的。 – max