我正在尝试使用Jinja过滤器按字母顺序对选择列表中的选项进行排序。我遇到的问题是列表具有混合的大小写值,并且不是按字母顺序排列的。我仍然想继续使用jinja过滤器,想知道是否反正用小写或其他东西进行比较。
目前表格中的清单
Jinja Code
{% for source,number in sources.items()|sort %}
<option {% if number == user.postfiltertype %} selected {% endif %} value='{{ number }}'>{{ source }}</option>
{% endfor %}
输入
[('iTunes', 8), ('RSS Feeds', 2), ('Twitter Incoming', 9), ('Facebook', 4), ('Android Market', 10), ('All Source Types', 0), ('YouTube', 5), ('Twitter', 3), ('Forums', 1)]
答案 0 :(得分:3)
您可以在|sort
之后添加以下内容:
(case_sensitive=False)
所以你得到:
{% for source,number in sources.items()|sort(case_sensitive=False) %}
请参阅:
答案 1 :(得分:0)
我查看了Jinja API并没有看到任何相关内容。也就是说,做起来会相对简单。如果您只想将第一个项目转换为小写,则可以执行以下操作:
def ignore_first_case(x):
if len(x) >= 1 and not isinstance(x, str):
return (hasattr(x[0], "lower") and x[0].lower() or x[0]) + x[1:]
else:
return hasattr(x, "lower") and x.lower() or x
def ignore_case_sort(seq):
return seq.sort(key=ignore_first_case)
然后最后,你需要在jinja环境中注册它
environment.filters["ignore_case_sort"] = ignore_case_sort