【问题标题】:How can I use a variable as index in django template?如何在 django 模板中使用变量作为索引?
【发布时间】:2012-11-02 19:35:45
【问题描述】:

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

...

【问题讨论】:

  • 如果bikesProfit 是一个以{2012:10.0, 2011:13.0} 格式传递给上下文的字典,那么bikesProfit.year 应该可以工作。您可能会在一年中混合使用 strint 键吗?
  • bikesProfityears_list 传递给上下文时它们会是什么样子?
  • 你试过那个 RickyA 吗?在我看来,它不应该起作用,因为密钥不是year,而是实际年份(2000 年)。
  • 现在试了,确实不行。它会做 bikesProfit["year"]。呸。

标签: python django arrays templates indexing


【解决方案1】:

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

你可以发custom template filter:

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

用法:

{{ bikesProfit|return_item:year }}

【讨论】:

  • @goliney 因为这是 google 上的第一个答案,您可以考虑将 : 放在函数标题后面!啊,我出去了……
  • @user2033511 谢谢你,我正在编辑答案
【解决方案2】:

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

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

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

{% for year, profit in bikeProfit.items %}
    ...
    <th>Total profit {{ year }}:</th>
    ...
    <th> {{ profit }} </th>
    ...

【讨论】:

    【解决方案3】:

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

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

    Something.objects.filter(something__typename='Bike', year__range=(1998, 2001)) 
    

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 2012-11-26
      • 2012-07-22
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多