【问题标题】:Django dynamically change index in templateDjango 动态更改模板中的索引
【发布时间】:2015-08-16 21:01:09
【问题描述】:

我的模板中目前有以下代码:

{% for test in page.object_list %}
    <tr>
        <td colspan="2" class="testsuite">{{ test.name.0 }}</td>
        <td class="testsuite">Failed: {{ percentages.0 }}%</td>
   </tr>
{% endfor %}

其中test.name.0 是测试套件的名称,percentages 是该测试套件中失败的测试用例的列表。我想知道如何将percentages.0 更改为percentages.i,其中ifor 循环的每次迭代中递增。

更新
尝试@Gocht 的回答后,我得到了以下代码:

在我的模板标签/get_percentage.py 文件中

from django import template
register = template.Library()

@register.filter
def get_percentage(percentage_list, i):
    return percentage_list[int(i)]

在我的模板中

{% load get_percentage %}
{% for test in page.object_list %}
    <tr>
        <td colspan="2" class="testsuite">{{ test.name.0 }}</td>
        <td class="testsuite">Failed: {{ percentages|get_percentage: forloop.counter0 }}%</td>
    </tr>
{% endfor %}

并且遇到“字符串索引超出范围”错误。我尝试寻找可能的原因,但没有一个答案与自定义模板标签有关。

【问题讨论】:

  • 我没有看到任何i,但如果percentagestest 中,你为什么不打电话给test.percentages.0
  • 我刚刚编了i。在常规的 python 代码中,我只会说 percentages[i] 并在该行之后增加 i。此外,percentages 不在test 中。我最初的想法是在模型中添加一个percent_failed 属性,但我相信编写这个项目的人正在使用 XML 文件中的解析数据填充这些模型对象,并且由于 XML 文件没有失败测试的数量应用程序崩溃。所以我只是计算我的views.py文件中的百分比,然后将它传递到页面中
  • 那是IndexError,请确保您列出的长度正确。
  • 我已经验证它是正确的长度
  • 该错误是尝试索引空字符串的结果。这是唯一一次使用 0 作为索引会导致这种情况。查看您的数据并衬线其中一个测试名称是空刺

标签: django django-templates


【解决方案1】:

我假设你错过了你的问题percentages.0 而不是percentages.i。在模板上的for 中,您可以使用forloop 变量访问索引。像这样:

{% for test in page.object_list %}
    {{ forloop.counter }}   # This will start at 1
    {{ forloop.counter0 }}  # This will start at 0
    # do something here
{% endfor %}

见:this answer

【讨论】:

  • 好的,但是如何使用它来索引我的百分比列表?我试过percentages.forloop.counter0 还是不行
  • 嗯,这是不可能的,但还有其他解决方案。您可以做一秒钟并比较它的计数器,或者您可以创建一个自定义模板过滤器。我为你找到了这个:custom filterfor inside for 以及一些关于这个的文档:for documentation
  • 啊,好吧,我想我明白了。所以在你发给我的关于自定义过滤器的链接中,我会在加载索引后在模板中使用{{ percentages|index:forloop.counter0 }}
  • 是的,就是这样,但您需要先创建并注册索引过滤器。
  • 好的,我试过了,但出现“字符串索引超出范围”错误。我用我尝试过的代码更新了我的帖子。知道为什么会这样吗?
猜你喜欢
  • 1970-01-01
  • 2010-11-14
  • 2019-11-16
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多