for循环中的Django模板多维数组访问

Posted

技术标签:

【中文标题】for循环中的Django模板多维数组访问【英文标题】:Django template multidimensionnal array acces in for loop 【发布时间】:2015-09-26 16:35:30 【问题描述】:

我在 Django 模板中遇到了一个烦人的问题。 我有一个 3 维数组,并希望像这样循环遍历模板中的第一个维度:

% for item in array % array.i.0.0 % endfor %

现在,我知道这行不通,因为 i 未定义,但我尝试使用 forloop.counter0 无济于事,并且正在寻找一种类似的简单方法。 我发现this link 使用了模板过滤器...这是唯一的解决方案吗?

谢谢。

【问题讨论】:

我不确定我是否理解你在这里想要做什么。你不能用 item.0.0 访问它吗? @HåkenLid 它似乎不起作用。也许我做错了什么。 你能把逻辑写在python代码中,这样我们就可以理解你在做什么?另外,您的数组是哪种数据类型?它是一个 numpy 数组吗? @HåkenLid 这是一个嵌套数组:array = [[['value' for i in range(x)] for j in range(y)] for k in range(z)] 【参考方案1】:

试试这个:

首先,您要定义两个模板过滤器,方便您将它们放在您的views.py中

@register.filter
def index(List, i):
    return List[int(i)]

@register.filter
def entry_num_array(List):
    return range(len(List))

然后在你的模板中

% for inner_array1 in main_array %
        % for counter1 in inner_array1|entry_num_array %
            inner_array1|index:counter1|
            %for inner_array2 in inner_array1 %
                % for counter1 in inner_array1|entry_num_array %
                    inner_array2|index:counter2|
                % endfor %            
        % endfor %
    % endfor %
% endfor %

您可能必须使用“with”才能使其工作:

【讨论】:

【参考方案2】:

我确实尝试了原始帖子中链接中的自定义模板过滤器解决方案,但一开始失败了。我收到array|access:key.0.0 的ValueError 可能是因为整个“key.0.0”位被发送到过滤器。因此,使用“with”模板标签,我能够实现我想要的。 % load filters % // File containing my custom filters % with array|access:forloop.counter0 as index % index.0.0 % endwith %

我仍然不知道是否存在更简单的解决方案,但它可以工作并且就我而言非常干净。

【讨论】:

以上是关于for循环中的Django模板多维数组访问的主要内容,如果未能解决你的问题,请参考以下文章

预编译的多维数组访问

使用 for 循环创建多维数组

如何循环访问和访问多维和关联数组中的各种元素? PHP,JSON 或 XML

php多维数组循环优化

带有嵌套for循环的Javascript多维数组-无法正常工作

2018-06-15for与数组/for-in与数组/一维二维多维数组