【问题标题】:Can I use the native map function to map a list of tuples to one of its element in a Jinja template?我可以使用本机 map 函数将元组列表映射到 Jinja 模板中的一个元素吗?
【发布时间】:2018-03-26 09:00:40
【问题描述】:

假设我有一个变量

t = [(1, 'hello'), (2, 'world')]

我想要的是在 Jinja 模板中将其映射到仅包含元组的第二个元素的新列表:

{% set s = t | map(...) | list %}

变量s 应该是['hello', 'world']

如果不使用自定义过滤器,这是否可能以某种方式实现?

【问题讨论】:

    标签: python templates jinja2


    【解决方案1】:

    根据 Jinja 文档中的 quote,Jinja 引擎在 python 表达式方面受到限制:

    ...
    Jinja2 不允许您将任意 Python 代码放入 模板也不允许所有 Python 表达式。 运营商是 仅限于最常见的表达方式和更高级的表达方式,例如 不支持列表推导和生成器表达式。这个 使模板引擎更易于维护,模板更多 可读。

    也就是说,您应该在实际的 Python 代码中进行大部分数据处理,或者您正在使用 JS,只需将其作为变量传递并使用 JS 处理它,然后将其渲染并尽可能保持模板干净以便于维护。

    编辑:受 Jinja 文档启发的解决方案:

    这可能对你有用,我在 Jinja's docs 上找到的:

    <ul>
    {% for nb, word in t %}
        <li><a href="">{{ word }}</a></li>
    {% endfor %}
    </ul>
    

    【讨论】:

      【解决方案2】:

      是的,这是attribute 方法:

      {% set t = [(1, 'hello'), (2, 'world')] %}
      {% set t1 = t|map(attribute=1)|list %}
      {{ t1 }}
      

      【讨论】:

        猜你喜欢
        • 2015-04-30
        • 1970-01-01
        • 2020-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多