我在嘗試在兩個維度上同時迭代模板時遇到了問題。幽靈自定義模板過濾器?
基本情況說明如下:
http://www.djangobook.com/en/2.0/chapter04/(在蘋果,香蕉指數爲例)
>>> from django.template import Template, Context
>>> t = Template('Item 2 is {{ items.2 }}.')
>>> c = Context({'items': ['apples', 'bananas', 'carrots']})
>>> t.render(c)
u'Item 2 is carrots.'
如果我想從1迭代至3本與變量「fruitstep」我無法在模板中執行此操作:
{{items.fruitstep}}失敗,考慮長點鏈,此概念會導致模板上的大量迭代需求。但我找不到一個標準的做法,我不確定這是不錯的模板練習。
所以,我創建了一個模板過濾器:
@register.filter
def key2value(collection,key):
try:
return collection[unicode(key)] # It seems that my collection
# keys are in unicode...
except:
return ""
這似乎是一個非常強大的過濾器。它開始是一個非常具體的標籤,但我想不出一個不完全通用的理由。
我想知道是否有一個標準的方法來做到這一點,我已經徹底改變了輪子,或者如果這段代碼可以做一些可以危害系統的東西。
謝謝!
我意識到安全問題與確保返回的任何內容是HTML安全有關。我相信,通過不改變任何默認值,它將逃脫返回的信息,但通過這種過濾器,將無法驗證集合中的物品是否安全... – iJames 2010-08-12 20:47:51