Spooky Custom Filter Filter? - PullRequest
       18

Spooky Custom Filter Filter?

0 голосов
/ 12 августа 2010

У меня возникли проблемы при попытке выполнить итерацию шаблона в двух измерениях одновременно.

Основная ситуация объясняется здесь:

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 ""

Это похоже начрезвычайно мощный фильтр.Сначала это был очень специфический тег, но я не мог придумать причину, по которой он не был бы полностью общим.

Мне интересно, есть ли стандартный способ сделать это, и я заново изобрел колесо, или этот код может сделать что-то, что может поставить под угрозу систему.

Спасибо!

1 Ответ

0 голосов
/ 13 августа 2010

Нет, нет причин не делать это в вашем собственном приложении.Я часто делал подобные фильтры и фактически выкладывал здесь очень похожий код в ответ на различные вопросы.

Трудно представить, каким образом обеспечение поиска в словаре может поставить под угрозу систему.Эта функция не предусмотрена по умолчанию в Джанго из первоначального желания иметь ограниченный язык шаблонов - это спорно ли следовало бы предусмотреть этот конкретный фильтр с самого начала, но учитывая, что это не было, это очень маловероятно, чтобы добавитьТеперь.

...