如何在django模板中使用变量作为索引?

时间:2012-11-14 09:58:36

标签: python django arrays templates indexing

如何在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>

...

3 个答案:

答案 0 :(得分:15)

这是一个非常常见的问题,SO上有很多答案。

您可以custom template filter

@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))