1

Jinja フィルターを使用して、選択リストのオプションをアルファベット順に並べ替えようとしています。私が抱えている問題は、リストに大文字と小文字が混在していて、アルファベット順に表示されないことです。とにかく小文字か何かで比較するかどうか疑問に思って、ジンジャフィルターを引き続き使用したいと思います。

現在の形式のリスト

  • すべてのソース タイプ
  • Android マーケット
  • フェイスブック
  • フォーラム
  • RSSフィード
  • ツイッター
  • ユーチューブ
  • アイチューンズ

ジンジャコード

{% 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 に答える