Jinja / Django for 循环范围不起作用

Posted

技术标签:

【中文标题】Jinja / Django for 循环范围不起作用【英文标题】:Jinja / Django for loop range not working 【发布时间】:2019-04-10 08:11:12 【问题描述】:

我正在构建一个 django 模板,以根据从视图传递的参数复制图像;然后模板在 for 循环中使用 Jinja2 来复制图像。

但是,我只能通过传递我在视图中创建的列表来使其工作。如果我尝试使用 jinja 范围,则会收到错误消息(“无法解析余数:...”)。

阅读this link,我发誓我使用了正确的语法。

模板

% for i in range(variable) %
    <img src=...>
% endfor %

我检查了我传入的变量;它是 int 类型。哎呀,我什至试图摆脱变量(用于测试)并尝试使用硬编码的数字:

% for i in range(5) %
    <img src=...>
% endfor %

我收到以下错误:

无法解析余数:'(5)' from 'range(5)'

如果我将参数字典中的列表传递给模板(并使用列表代替范围语句),它就可以工作;图像可以重复多次。

我错过了什么? Jinja 上的文档(for loop 和 range)和上一个链接都告诉我这应该适用于范围和变量。

【问题讨论】:

看看here。不幸的是,Django 模板不支持 range 函数。 Errrrg。谢谢,弗兰迪。 【参考方案1】:

Soooo.... 基于 Franndy 的评论,这不是 Django 自动支持的,并按照他们的 link,这导致 this link,我找到了如何编写自己的过滤器。

views.py 内:

from django.template.defaulttags import register

@register.filter
def get_range(value):
    return range(value)

然后,在模板中:

% for i in variable|get_range %
    <img src=...>
% endfor %

【讨论】:

以上是关于Jinja / Django for 循环范围不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jinja (django) 中使用 for 循环显示最新的 5 个订单

如何在 Jinja2 模板 Django 中计算循环“for in”中的所有元素

Python / Django / Jinja2:如何用另一个变量的值扩展变量名(例如在 for 循环中)?

范围在 for 循环中不起作用

Jinja for 循环不会填充选择下拉列表

带有 Jinja2 的 Django 1.8:Contrib 应用程序管理员不起作用