如果子串匹配,Jinja会加入字符串列表

时间:2014-08-08 20:27:21

标签: jinja2

是否可以在jinja2中执行类似的操作:

my_list = ['foo1', 'bar1', 'foo2', 'bar2'] # could be any number of foo's and bar's
[i for i in my_list if 'foo' in i]

我正在查看地图并加入,例如:

{% my_list|map('???')|join(' ') %}

但我找不到希望我进行任何通配符搜索的过滤器。最接近的两个看起来像' sameas'并且'等于'但那些不安静的工作。

1 个答案:

答案 0 :(得分:0)

如果您使用的是最新版本的Jinja2(2.7或更高版本),则会有一个名为“select”的新过滤器,它似乎可以满足您的需求。 jinja.pocoo.org/docs/dev/templates/#select您可能必须为此编写自己的测试,并在实例化时将其传递给jinja2对象。

{% set my_foo_bars %}
    {%- for item in my_list %}
        {%- if item %}
 {{item}}
        {% endif -%}
    {% endfor -%}
{% endset %}

如果您使用的是更新版本(2.8或更高版本),则还可以使用块分配http://jinja.pocoo.org/docs/dev/templates/#block-assignments

class Assignee(EmbeddedDocument):
    id = ObjectIdField(primary_key=True)
    assignee_email = EmailField(required=True)
    assignee_first_name = StringField(required=True)
    assignee_last_name = StringField()
    assignee_time = DateTimeField(required=True, default=datetime.datetime.utcnow)
    user = ReferenceField('MongoUser', required=True)
    user_id = ObjectIdField(required=True)

class MongoUser(Document):
    email = EmailField(required=True, unique=True)
    password = StringField(required=True)
    first_name = StringField(required=True)
    last_name = StringField()
    assignees= EmbeddedDocumentListField(Assignee)

如果您遇到旧版本(例如来自Google应用引擎的jinja2),如果可能的话,您可能最好在将其传递到模板之前进行处理。