Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问Jinja2以获取循环外的循环变量?_Python_Jinja2 - Fatal编程技术网

Python 如何访问Jinja2以获取循环外的循环变量?

Python 如何访问Jinja2以获取循环外的循环变量?,python,jinja2,Python,Jinja2,我有一个Jinja2模板页面,其中包含两个独立的{%for%}循环。如果这两个循环都不包含任何项,我希望页面重定向 我正在尝试这样做(伪代码): 这可能吗?有没有办法使循环.length变量在各自的循环之外可用?您可以检查您的列表是否正确,空列表在Jinja2中是错误的 {% if things %} {% for thing in things %} .... {% endfor %} {% else %} <!-- redirect here --> {% end

我有一个Jinja2模板页面,其中包含两个独立的
{%for%}
循环。如果这两个循环都不包含任何项,我希望页面重定向

我正在尝试这样做(伪代码):


这可能吗?有没有办法使
循环.length
变量在各自的循环之外可用?

您可以检查您的列表是否正确,空列表在Jinja2中是错误的

{% if things %}
    {% for thing in things %} .... {% endfor %}
{% else %}
    <!-- redirect here -->
{% endif %}
{%if things%}
{%表示事物中的事物%}。。。。{%endfor%}
{%else%}
{%endif%}
简单的答案是“否”:您不能直接使用模板——它应该在控制器/服务器的视图逻辑中


虽然从技术上讲,一个人可以,但不能帮任何人任何忙。

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

{% set all_things = thing1 + thing2 %}
{% if all_things %}
    {# There is more than one thing in the two lists #}
{% else %}
    {# redirect #}
这就是说,这是而不是属于模板级别的内容-您每次点击页面时都会生成另一个列表,其中包含
thing1
thing2
中的所有内容,这将在资源方面产生成本。您正在将应用程序逻辑置于模板级别,这将不可维护。最后,您正在掩盖一个更大的问题,即更改后端代码代价高昂。(请理解,在所有这些情况下,“你”都是通用的“你”——如“你工作的公司”)

你(特别是)应该向那些要求你实施此黑客攻击的人提出这些问题,并尝试在该工具/产品/公司成为FrankenCode的一部分之前改变其发展方向


祝你好运

您可以使用以下命令检查长度
事物
对象(您正在循环的对象):

现在回答你的问题。假设循环通过的对象名为
t1
t2
,可以执行以下操作:

{% if t1 | length == 0 and t2 | length == 0 %}
 //use javascript to redirect(assuming you have the link)
{% endif %}
您可以在JavaScript块中执行此操作。我不知道这是否是最有效的方法,但是,它应该有效

我发布这个答案,因为这个问题没有经过投票或被接受的答案。

我真希望这能有所帮助。

呃。。重定向需要来自服务器,与模板无关。请尝试第一个循环
{%set i=loop.counter0%}
第二个循环
{%set j=loop.counter0%}
条件
{%if i+j等于0%}
这是我首先尝试的,但是i和j并不存在于它们各自的循环之外,每个循环每次迭代都会在页面上放置一个div,这些div共享一个其他地方找不到的类、文本等。在两个循环都运行之后,有没有一种方法可以简单地说,“如果这个类或文本在页面上不存在,重定向”?我意识到,但在这种情况下,我别无选择,项目(希望)不会需要很长时间,并且决定这样做比在后端改变东西要容易。然后你只需在中间代理重定向规则——听起来像是一种可怕的方式。though@DsDyer:那么你应该问那些认为编写代码很容易的人,并反驳那些声称代码不容易的人,简单。这里的问题是我正在过滤条件,所以它实际上是{%for things in things if not thing.attribute%},那么我如何测试“things if not thing.attribute”是否为真?
{{things|length}}
{% if t1 | length == 0 and t2 | length == 0 %}
 //use javascript to redirect(assuming you have the link)
{% endif %}