如何在django模板中使用变量作为索引?
现在我收到此错误:
Exception Type:
TemplateSyntaxError
Exception Value:
Could not parse the remainder: '[year]' from 'bikesProfit.[year]'
我也试过了{{ bikesProfit.year }}
,但这会得到一个空洞的结果。
{% for year in years_list %}
<tr>
<th>Total profit {{ year }}:</th>
</tr>
<tr>
<th></th>
<th> {{ bikesProfit[year] }} </th>
...
答案 0 :(得分:15)
这是一个非常常见的问题,SO上有很多答案。
@register.filter
def return_item(l, i):
try:
return l[i]
except:
return None
用法:
{{ bikesProfit|return_item:year }}
答案 1 :(得分:2)
我认为这不是直接可行的(编辑:您可以使用过滤器手动实现它,如goliney's answer所示)。 documentation说:
由于Django故意限制模板语言中可用的逻辑处理量,因此无法将参数传递给从模板内访问的方法调用。数据应在视图中计算,然后传递给模板进行显示。
如果您的案例并不比您所展示的更复杂,我认为最好的解决方案是转而使用bikeProfit
。
{% for year, profit in bikeProfit.items %}
...
<th>Total profit {{ year }}:</th>
...
<th> {{ profit }} </th>
...
答案 2 :(得分:1)
这是可能的,但违背了Django模型......
如果你有感兴趣的项目,那么理想情况下你的视图应该返回一个只包含那些项目的对象,(OTTOMH之类的):
Something.objects.filter(something__typename='Bike', year__range=(1998, 2001))