【发布时间】:2011-03-29 03:19:58
【问题描述】:
我在尝试同时在两个维度上迭代模板时遇到了麻烦。
这里说明基本情况:
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 ""
这似乎是一个非常强大的过滤器。它开始是一个非常具体的标签,但我想不出理由不让它完全通用。
我想知道是否有一种标准方法可以做到这一点并且我已经重新发明了轮子,或者这段代码是否可以做一些可能危及系统的事情。
谢谢!
【问题讨论】:
-
我意识到安全问题与确保返回的任何内容都是 HTML 安全有关。我相信通过不更改任何默认值,它会转义返回的信息,但是使用这种过滤器将无法验证集合中的项目是否安全......
标签: django templates tags rendering filter