如何使用当前索引获取另一个数组的值?

时间:2016-01-09 18:18:34

标签: django django-templates

我读过this,我有一个这样的数组:

context[u'erreurs'] = {
    'aa': {'titres': [], 'liste': [], 'urls': []},
    'bb': {'titres': [], 'liste': [], 'urls': []},
    '...': {'titres': [], 'liste': [], 'urls': []}
}

如果出现错误,'titres''liste''urls'将成为字符串数组,并填充了足够的值。

在我的模板中,如果设置了erreur,我会这样做:

    {% for idx, tab in erreurs.items %}
        <ul>
        {% for e in tab.liste %}
            {% if user.is_authenticated %}
            <li><a href="{{ tab.urls[forloop.counter0] }}">{{ e }}</a></li>
            {% else %}
            <li>{{ e }}</li>
            {% endif %}
        {% endfor %}
        </ul>
    {% endfor %}

我想使用当前索引来使用另一个数组中的值,此处为:tab.urls。它不起作用并给我错误:

Could not parse the remainder: '[forloop.counter0]' from 'tab.urls[forloop.counter0]'

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

不幸的是,Django的模板不支持这种语法。您应该将自定义模板过滤器放在一起:

# yourapp/templatetags/yourapp_tags.py:
from django import template
register = template.Library()

@register.filter
def at_index(array, index):
    return array[index]

并使用它:

{% load yourapp_tags %}
{{ tab.urls|at_index:forloop.counter0 }}

答案 1 :(得分:0)

您需要创建一个代表数据的实际模型,然后任务变得微不足道

class YourModel(object):
    titre = ''
    liste = '' 
    url = ''

context[u'erreurs'] = {
    'aa': [],  # List of model
}

{% for idx, tab in erreurs.items %}
    <ul>
    {% for model in tab %}
        {{ model.titre }}
        {{ model.liste }}
        {{ model.url }}
    {% endfor %}
    </ul>
{% endfor %}