J.J*_*.J. 7 python django django-templates
根据The Django Book,Django的模板系统支持嵌套点查找:
点查找可以嵌套多个级别.例如,以下示例使用{{person.name.upper}},它转换为字典查找(person ['name']),然后是方法调用(upper()):'{{person.name.upper是{{person.age}}岁.
文件中没有广泛涵盖这种方法的地精吗?我遇到嵌套点查找问题 - 这是一个最小的例子:
views.py:
test = [{'foo': [1, 2, 3], 'bar': [4, 5, 6]}, {'baz': [7, 8, 9]}]
ndx = 'bar'
t = loader.get_template('meh.html')
c = Context({'test': test,
'ndx': ndx,})
return HttpResponse(t.render(c))
Run Code Online (Sandbox Code Playgroud)
meh.html模板:
<pre>
{{ test }}
{{ test.0 }}
{{ test.0.ndx }}
</pre>
Run Code Online (Sandbox Code Playgroud)
产生的HTML:
<pre>
[{'foo': [1, 2, 3], 'bar': [4, 5, 6]}, {'baz': [7, 8, 9]}]
{'foo': [1, 2, 3], 'bar': [4, 5, 6]}
</pre>
Run Code Online (Sandbox Code Playgroud)
当我期望[4,5,6]时,列表元素中的字典键的嵌套查找不返回任何内容.
JJ
我认为问题在于,您希望ndx在完全没有发生的情况下进行评估.你试过这个:
{{ test.0.bar }}
Run Code Online (Sandbox Code Playgroud)
我认为这会做你想要的.
有这种方法的哥布林......?
有点,但它们不是你正在谈论的那些,我不认为这是因为嵌套,或者至少,它在你达到一个深度之后不会变得更糟.我的意思是所有查找参数都是文字.没有办法改变这一点.因此,虽然您可能能够开发自定义模板标记并将它们传递给文字或变量进行评估,但如果您希望根据另一个值的评估值直接访问某个变量的某个成员,那么您真的不走运.(你可能会为此编写一个模板标签,但它不能在所有需要的情况下工作,并且可能比它的价值更复杂.)
无论它的价值如何,这看起来都像是模板语言的一个非常有意义的方面.我邀请您考虑访问者应该如何知道是否{{ foo.bar }}应该被视为foo[bar]或foo['bar'].如果不使语法复杂化,似乎不可能做出有意义的判断,这是django的模板设计坚持避免的事情.
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |