在Django中,在一個模板變量的點理論上表示一個查找,基於分辨率的以下順序上:Django的:模板字典/對象交叉引用
- 字典查找。示例:
foo["bar"]
- 屬性查找。示例:
foo.bar
- 方法調用。示例:
foo.bar()
- 列表索引查找。示例:
foo[bar]
從rendering a context in django 1.2(docs.djangoproject.com)。
在現實:
視圖:
...
class Veggie(object):
def __init__(self, name):
self.name = name
veggies = {'a': Veggie('carrot'), 'b': Veggie('lettuce')}
basket = ['a', 'c', 'b']
return render_to_response('tpls/veggies.txt',
{'veggies': veggies, 'basket': basket},
mimetype="text/plain")
模板:
Veggie by basket order, showing name
{% for veg in basket %}
{{ veg }}
{{ veggies.veg.name }}
{% endfor %}
輸出:
Veggie by basket order, showing name
a
c
b
該輸出中沒有素食名。
我認爲這不是Django所說的那樣。我明白,我可以寫一個標籤來解決這個問題。這很醜陋。
這是一個沒有對Django開發團隊修復,按照Django ticket 12486,因爲「我們的目的是,Django的模板,可以讀取和非程序員編寫的,因此複雜的邏輯應該是視圖代碼或自定義模板標籤。」 (Luke工廠)
對於在這種情況下編寫可讀的模板代碼的一些實用建議,我很感激(我有很多不同種類的「蔬菜」來解引用)。如果我們有模板編寫人員 - 他們知道如何進行字典查找,那麼是否值得從Django中脫身?
我知道你知道是怎麼回事,但我不明白爲什麼你認爲違背它在文檔中說。相反,您引用的文檔非常清晰,並且其中沒有任何內容表示它會將變量用作字典鍵。 –