2011-12-06 63 views
3

我很新的python/django。 我愛django的模板,但有一個經常性的東西,我找不到yesno過濾器上的複雜比較?

我很常見我有一個條件屬性(可能很長)的HTML標籤。大多數時候這是一個額外的CSS類。

例如,假設您有兩個切換語言的鏈接,並且您希望一次僅啓用一個。我發現自己做這樣的事情:

{% get_language_info for LANGUAGE_CODE as l %} 
<a href="/path/to/switch/to/spanish" 
    class="{% ifequal l.code "es" %} disable {% endifequal %}"> 
    <img src="/spanish/flag/url" alt="Spanish"> 
</a> 
<a href="/path/to/switch/to/english" 
    class="{% ifequal l.code "en" %} disable {% endifequal %}"> 
    <img src="/english/flag/url" alt="English"> 
</a> 

其他的例子可能是在渲染的項目清單,並檢查了「選擇」一個等

在我與三元運營商這樣做是其他語言,但我知道這是蟒蛇/ Django世界上的「邪惡」:-)

我不知道是否有一種方法來利用「yesno」過濾器。我試圖做類似的事情:

{{l.code=="es"|yesno:"disabled,"}} 

但我無法得到它的工作......我錯過了什麼嗎?

在此先感謝。

回答

2

的問題是簡單地在您發佈的代碼的語法:

{{l.code=="es"|yesno:"disabled,"}} 

它實際上處理,如:

{{ l.code=={{"es"|yesno:"disabled,"}} }} 

(注:該代碼不起作用,它只是意味着說明Django如何讀取它)

你想要的是一個自定義模板標籤,其工作方式與if模板標籤相似,但返回像yesno過濾器河你可以在djangosnippets.com等東西上搜索;也許有人已經爲你完成了這項工作。否則,我會建議查看這兩個Django源代碼並嘗試將它們合併到您自己的模板標籤中。

0

或者你可以使用jQuery/javascript設置類: http://api.jquery.com/attr/ 這樣的事情 - 沒有測試!

{% get_language_info for LANGUAGE_CODE as l %} 

<script> 
{% if l.code='es' %} 
    $('.english').attr('class','disable'); 
{% else %} 
    $('.english').attr('class','disable'); 
{% endif %} 
</script> 



<a href="/path/to/switch/to/spanish" 
    id="spanish" class='enable"> 
    <img src="/spanish/flag/url" alt="Spanish" > 
</a> 
<a href="/path/to/switch/to/english" 
    id="english" class='enable"> 
    <img src="/english/flag/url" alt="English"> 
</a>