1

I have a Jinja2 template page which contains two separate {% for %} loops. If neither of these loops contain any items, I want the page to redirect.

I'm trying to do something like this (pseudo-code):

loop1 = loop.length (in first loop)
loop2 = loop.length (in second loop)

if loop1 + loop2 == 0: redirect # (outside both loops)

Is this even possible? Is there a way to make the loop.length variables available outside their respective loops?

4

4 回答 4

0

您可以检查您的列表是否属实,在 Jinja2 中空列表是错误的。

{% if things %}
    {% for thing in things %} .... {% endfor %}
{% else %}
    <!-- redirect here -->
{% endif %}
于 2012-07-30T19:45:52.497 回答
0

简单的答案是“不”:您不能使用模板重新定向——它应该在控制器/服务器的视图逻辑中。

虽然在技术上可以,但对任何人都没有帮助。

于 2012-07-30T19:48:29.950 回答
0

您可以使用长度过滤器检查长度things对象(您正在循环的对象):

{{things|length}}

现在回答你的问题。让我们假设您循环的对象被命名为t1t2您可以这样做:

{% if t1 | length == 0 and t2 | length == 0 %}
 //use javascript to redirect(assuming you have the link)
{% endif %}

您可以在 JavaScript 块中执行此操作。我不知道这是否是最有效的方法,但是,它应该有效。

我发布这个答案,因为这个问题没有投票或接受的答案。
我希望这会有所帮助。

于 2014-09-08T08:35:00.060 回答
0

假设这两件事都是列表,您可以这样做:

{% set all_things = thing1 + thing2 %}
{% if all_things %}
    {# There is more than one thing in the two lists #}
{% else %}
    {# redirect #}

话虽如此,这属于模板级别 - 您正在生成另一个列表,其中包含所有内容,thing1并且thing2每次点击页面时都会花费资源。您将应用程序逻辑放在模板级别,这是不可维护的。最后,您正在解决更大的问题——更改后端代码的成本很高。(请理解,在所有这些情况下,“您”都是通用的“您”——就像在“您工作的公司”中一样)。

您(特别是)应该向那些要​​求您实施此 hack 的人提出这些问题,并尝试在此工具/产品/公司成为 FrankenCode 之前改变其所采取的方向。

祝你好运!

于 2012-07-31T02:01:34.303 回答