2011-08-01 223 views
0

我有這樣的代碼情況Django的模板過濾器

{%,如果1 |在 '7,10' %floatformat} 是 {%其他%} 沒有 {%ENDIF%}

的返回結果始終設置爲「是」,如何使結果返回「否」 請大家幫忙。 感謝

+0

即時對不起,我必須澄清'7,10'是數據庫查詢結果是價值7,10(數字分隔逗號) – Adit

回答

0

1|floatformat回報1和條件檢查1'7,10',因爲Django的認爲'7,10',因爲它返回True一個字符串。嘗試傳遞一個列表,它將不會返回

1

很難從你的例子中發現這裏究竟發生了什麼,因爲你用虛擬數據代替了真正從數據庫中出來的東西。如你所寫,結果將始終爲「是」,因爲字符串'7,10'包含字符串'1'。

聽起來像你想達到什麼是:

如果這個數字是在此列表中,那麼是的,否則就沒有。

讓我們改寫這個模板是一個小更真實:

{% if mynumber in yeslist %} yes {% else %} no {% endif %} 

這假定:

  • mynumber的是一個數字
  • yeslist是數字
  • 列表

我不確定你使用的是什麼f loatformat for在這種情況下。

如果上述斷言不正確,並且您必須使用字符串,那麼您的工作就會更加困難,並且您應該在服務器端處理yeslist。例如,如果yeslist只是一個像「7,10,123,93,9,19,83」這樣的字符串,那麼在模板中確定數字8是否在列表中將會是不必要的困難。很容易做它在您的觀點:

def myview(request): 
    ctx = {} 
    # ... do some work ... 
    # yeslist now has a string like "7,10,123,93,9,19,83" 
    ctx['yeslist'] = yeslist.split(',') 
    # ... do more work, and render the response ... 

現在,{% if '8' in yeslist %}將不再返回一個假陽性,因爲它不是做一個字符串匹配,它做列表成員。

+0

感謝伊丹Gazit,這正是我的意思。我會試着解決這個問題。謝謝 – Adit

+0

Adit:如果你發現我的帖子有幫助,那麼請upvote或接受它! –