【问题标题】:Flask - jinja2 access data from filtered resultFlask - jinja2 从过滤结果中访问数据
【发布时间】:2020-03-01 10:19:05
【问题描述】:

数据:

[
            {
                "name": "fixed",
                "addr": "172.16.1.100",
                "active": "Yes"
            },
            {
                "name": "floating",
                "addr": "10.90.80.10",
                "active": "No"
            }
        ]

我正在尝试过滤 jinja2 模板中的这些数据和过滤结果中的值。

{{ data|selectattr("name", "equalto", "floating")}}

这给了我

{
                "name": "floating",
                "addr": "10.90.80.10",
                "active": "No"
            }

我想从此结果中获取活动状态。 我试过{{ data|selectattr("name", "equalto", "floating")|attr("active")}},它返回为空白。

这样做的正确方法是什么?在应用 jinja 过滤器“|”后访问属性

注意:我刚刚在下面尝试过,它可以工作。问题是当我应用过滤器然后我尝试访问一个属性时。使用 attr 方法。

This works
{{ data[0]['active'] }}

This doesnt 
{{ data|first|attr('active') }}

【问题讨论】:

  • addr 属性值后面缺少逗号。
  • 更新了问题。以上只是样本数据。所以问题不在于数据。

标签: python django flask jinja2


【解决方案1】:

如果你也想过滤活动状态,试试这个

{{ data|selectattr("name", "equalto", "floating")|selectattr("active", "equalto", "No")|list }}

这就是我从你的问题中了解到的,我不知道你真正想要什么“主动”过滤器。

已编辑:

如果您只想从 active 中获得价值,只需执行以下操作:

{{ (data|selectattr("name", "equalto", "floating")|list)[0]["active"] }}

【讨论】:

  • 那不是我想要的。我想要的是使用密钥访问值。以pythonic方式“data.get(''active”)“。当我使用过滤器(在本例中为selectattr-equalto)时,我无法让它工作。想要对结果应用get方法过滤器。
  • 作为临时解决方案,我使用 {% set tempdata= data|selectattr("name", "equalto", "floating") %} 然后 {{ tempdata['active'] }} .这行得通。有没有办法在一行中完成这项工作?
猜你喜欢
  • 2015-10-14
  • 2018-08-30
  • 2019-05-02
  • 1970-01-01
  • 2021-08-21
  • 2023-04-10
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多