幽灵般的自定义模板过滤器?

时间:2010-08-12 19:46:55

标签: django templates tags rendering filter

我在尝试同时在两个维度上迭代模板时遇到了麻烦。

基本情况在这里解释:

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.'

如果我想用变量“fruitstep”从1到3进行迭代,我不能在模板中进行:

{{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 :(得分:0)

不,没有理由不在自己的应用程序中执行此操作。我经常做类似的过滤器,实际上在这里发布了非常相似的代码来回答各种问题。

很难想象提供字典查找会破坏系统的方式。 Django默认情况下不提供此功能,因为最初需要使用受限制的模板语言 - 这个特定的过滤器是否应该从一开始就提供,但是考虑到它不是,它很可能不会被添加现在