Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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中使用enumerate(zip(seq1,seq2))?_Python_Django_Jinja2_Enumerate - Fatal编程技术网

Python 如何在jinja2中使用enumerate(zip(seq1,seq2))?

Python 如何在jinja2中使用enumerate(zip(seq1,seq2))?,python,django,jinja2,enumerate,Python,Django,Jinja2,Enumerate,我试图用Django给一些RNA序列着色。我使用enumerate和zip查找列表中的相等索引。例如: for i, (a, b) in enumerate(zip(seq1, seq2)): if a == b and i not in green: <p style="color: green;">{{i}}</p> elif a != b and i not in red: <p

我试图用Django给一些RNA序列着色。我使用enumerate和zip查找列表中的相等索引。例如:

for i, (a, b) in enumerate(zip(seq1, seq2)):
        if a == b and i not in green:
            <p style="color: green;">{{i}}</p>

        elif a != b and i not in red:
            <p style="color: red;">{{i}}</p>
对于枚举(zip(seq1,seq2))中的i,(a,b):
如果a==b且i不是绿色:

{{i}

埃利夫a!=b我不是穿红色的:

{{i}

我在模板中收到此错误:

“for”语句应使用“for x in y”格式:for i,(a,b)in 枚举(zip(seq1,seq2)):

Django。它基本上告诉你,你只允许做简单的for循环,从一个简单的输入iterable中读取每个循环的一项

解决方案是在呈现模板的代码中创建“要迭代的内容”,并将其作为上下文的一部分传递,然后进行迭代。

我认为Jinja模板引擎在解析
for
循环中的
I,(a,b)
部分时存在问题,因此可能值得为此提交一份票据。也许这是故意的行为

无论如何,你可以在这里用三元组压缩。首先,我们可以采取行动。因此,可以使用
itertools.count()
将引用
'count'
传递到上下文,然后使用以下内容进行渲染:

{% for i, a, b in zip(indices(), seq1, seq2) %}
     {# ... #}
{% endfor %}
例如:

>>> from jinja2 import Template
>>> from itertools import count
>>> Template('{% for i, a, b in zip(indices(), seq1, seq2) %} {{ (i, a, b) }}{% endfor %}').render(indices=count, seq1='foobar', seq2='babbaa', zip=zip)
" (0, 'f', 'b') (1, 'o', 'a') (2, 'o', 'b') (3, 'b', 'b') (4, 'a', 'a') (5, 'r', 'a')"

尽管如此,我强烈建议不要在模板中编写业务逻辑。事实上,这就是Django模板引擎最初不允许这种语法的主要原因。最好在视图中创建
zip
对象,并将其通过上下文传递到渲染引擎。

此代码可能会有所帮助,请尝试下面的代码looks linke,它对我很好

(根据我使用的一些工作代码修改)

在Jinja2中使用“for loop”时,使用loop.xxx访问一些特殊变量

such as:
  loop.index        # index (1 inexed)
  loop.index0       # index (0 inexed)
  loop.revindex     # reversed ...
  loop.revindex0    # reversed ...
  loop.first        # True if first iteration
  loop.last         # True if last iteration
  loop.length
  loop.depth        # Recursive loop depth
  loop.depth0       # Recursive loop depth (0 inexed)
代码:
错误继续请注意,这不是Django模板引擎,而是安装在Django中的Jinja模板引擎。
{% for (item_a, item_b) in zip(seq1, seq2) %}
{# important note: you may need to export __builtin__.zip to Jinja2 template engine first! I'm using htmlPy for my app GUI, I'm not sure it will or not affect the Jinja2 Enviroment, so you may need this #}
  <tr>
    <td>No.{{ loop.index0 }}</td>{# index (0 inexed) #}
    <td>No.{{ loop.index }}</td>{# index (1 started) #}
    <td>{{item_a}}</td>
    <td>{{item_b}}</td>
  </tr>
{% endfor %}
python 2.7.11 (I have py35 py36 but the code wasn't tested with them)

>py -2
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
>pip2 show jinja2
Name: Jinja2
Version: 2.8