1

我正在尝试使用 Jinja 过滤器按字母顺序对选择列表中的选项进行排序。我遇到的问题是列表的大小写混合,并且没有按字母顺序出现。我仍然想继续使用 jinja 过滤器,想知道是否要通过小写或其他方式进行比较。

当前形式的列表

  • 所有源类型
  • 安卓市场
  • Facebook
  • 论坛
  • RSS订阅
  • 推特
  • YouTube
  • iTunes

神社守则

{% 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)] 
4

2 回答 2

3

您可以在之后添加以下内容|sort

(case_sensitive=False)

所以你得到:

{% for source,number in sources.items()|sort(case_sensitive=False) %}

看:

http://jinja.pocoo.org/docs/templates/#filters

于 2012-07-20T20:02:21.300 回答
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
于 2012-07-20T19:50:26.677 回答