1

treebeard モデルからディレクトリ ツリーを表示しようとしています。treebeard チュートリアルで提案されている注釈付きリスト メソッドは正常に機能しますが、データ ツリーに ID 情報を含めたいと考えています。

dump_bulk() には必要な情報がすべて含まれていますが、python と django の初心者として、情報を抽出してテンプレートに表示する方法を見つけるのに苦労しています。

javascript に切り替えて、json 文字列を解析することを考えましたが、javascript は文字列値の前の u プレフィックスが好きではありません。uプレフィックスを避ける簡単な方法はありますか?

また、id 情報を含む get_annotated_list() に基づく関数を作成することも考えました。ID情報が含まれるようにget_annotated_リストをオーバーロードできるはずだと思いますが、それに取り組む方法もよくわかりません。

学習曲線に沿って進歩するのに役立つあらゆる提案をいただければ幸いです。

4

1 に答える 1

1

おそらくご存じのとおり、get_annotated_list()はタプルの配列を の形式で返し(node, info)ます。infoは単なる辞書であるため、リストを繰り返し処理して、必要なキー ペアを追加できます。例えば、

for node, info in my_annotated_list:
    info['foo'] = node.id

これをテンプレートに渡せば問題ありません。

ジェネレーターを使用することもできます。これは、私が現在取り組んでいるプロジェクトからのものです。

def annotated_menu_items(initial_header, menu_items):
    headings = [initial_header]
    for item, info in menu_items:

        yield item, info, item.is_leaf(), headings[-1:][0]

        if info['open']:
            headings.append(item.title)

        for close in info['close']:
            headings.pop()

ここでは、問題のノードが葉であるかどうかを追加情報として追加し、最近開いたノードからタイトルをスタックにプッシュして、ツリーのより深いレベルからアクセスできるようにします。

あなたは Python は初めてだと言うので、ジェネレーターについて読みたいと思うかもしれません。(潜在的に無限の) リストの要素を遅延して実体化します。それを使用するには、ジェネレーターを構築する関数を呼び出します。その後、ジェネレーター オブジェクトを として扱うことができますiterable。例えば、

my_fancy_menus = annotated_menu_items("My Menu", my_annotated_list)

for menu in my_fancy_menus:
    do_stuff(menu)

リストのように扱われるジェネレーターを Django テンプレートに渡すこともできます。

于 2014-03-25T20:50:28.623 に答える