В Django точка в шаблонной переменной теоретически означает поиск , основанный на следующем порядке разрешения:
- Словарь поиска. Пример:
foo["bar"]
- Поиск атрибутов. Пример:
foo.bar
- вызов метода. Пример:
foo.bar()
- Поиск по индексу списка. Пример:
foo[bar]
из рендеринг контекста в 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 для доступа к словарю» *1043* написать тег, чтобы решить эту проблему. Это безобразно.
Это без исправления для команды Django, согласно Билету Django 12486 , потому что "Намерение состоит в том, что шаблоны Django могут быть прочитаны и написаны непрограммистами, настолько сложными Логика должна заключаться в просмотре кода или пользовательских тегов шаблона (Люк Завод)
Я был бы признателен за несколько практических советов по написанию разборчивого шаблонного кода в этой ситуации (у меня много «овощей» разного рода для разыменования). Стоит ли отходить от Django, если у нас есть создатели шаблонов, которые - хм - знают, как выполнять поиск по словарю?