簡體   English   中英

Jinja2檢查字典列表中是否存在值

[英]Jinja2 check if value exists in list of dictionaries

我正在嘗試檢查包含字典的列表中是否存在值。 我使用燒瓶1.0.2。 請參見下面的示例:

person_list_dict = [
    {
        "name": "John Doe",
        "email": "johndoe@mydomain.com",
        "rol": "admin"
    },
    {
        "name": "John Smith",
        "email": "johnsmith@mydomain.com",
        "rol": "user"
    }
]

我找到了兩種方法可以解決此問題,您能告訴我哪個更好嗎?:

第一種選擇:jinja2內置模板過濾器“地圖”

<pre>{% if "admin" in person_list_dict|map(attribute="rol") %}YES{% else %}NOPE{% endif %}</pre>
# return YES (john doe) and NOPE (john smith)

第二種選擇:燒瓶模板過濾器

燒瓶代碼:

@app.template_filter("is_in_list_dict")
def is_any(search="", list_dict=None, dict_key=""):
    if any(search in element[dict_key] for element in list_dict):
        return True
    return False

模板代碼:

<pre>{% if "admin"|is_in_list_dict(person_list_dict, "rol") %} YES {% else %} NOPE {% endif %}</pre>
# return YES (john doe) and NOPE (john smith)

謝謝 :-)。

如果可能的話,在將其添加到Jinja中之前,我會將此邏輯移至腳本的python部分。 因為,正如Jinja文檔中所述:“毫無疑問,您應該嘗試從模板中刪除盡可能多的邏輯。”

與其他兩個選項相比, any([person['role'] == 'admin' for person in person_dict_list])乍一看要容易得多。

如果這不是一個選擇,那么我可能會使用第一個內置函數,因為我認為它作為自己的解決方案在邊緣情況下不太容易出錯,並且代碼減少了約6倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM