6

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

...
4

3 回答 3

19

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

您可以制作自定义模板过滤器

@register.filter
def return_item(l, i):
    try:
        return l[i]
    except:
        return None

用法:

{{ bikesProfit|return_item:year }}
于 2012-11-14T10:12:45.870 回答
3

我不认为这是直接可能的(编辑:您可以使用过滤器手动实现它,如goliney 的答案所示)。文档说:

因为 Django 有意限制模板语言中可用的逻辑处理量,所以无法将参数传递给从模板中访问的方法调用。数据应该在视图中计算,然后传递给模板进行显示。

如果您的案例并不比您展示的更复杂,那么我认为最好的解决方案是循环bikeProfit

{% for year, profit in bikeProfit.items %}
    ...
    <th>Total profit {{ year }}:</th>
    ...
    <th> {{ profit }} </th>
    ...
于 2012-11-14T10:13:25.373 回答
2

这是可能的,但违背了 Django 模型的本质......

如果您有感兴趣的项目,那么理想情况下,您的视图应该返回一个仅包含这些项目的对象(类似于 OTTOMH):

Something.objects.filter(something__typename='Bike', year__range=(1998, 2001)) 
于 2012-11-14T10:25:54.767 回答