2011-06-17 6 views
2

私はdjnago-pythonで自分のデータに単純なforループを実行しようとしています。Django html for、など

リストを繰り返し処理して、要素xに特定のフィールド値があるかどうかを確認します。もしそうなら、私は削除オプションを表示したい、そして追加オプションを表示しないようにする。

それは通常の言語でこのように見えるようになって:

flag = false 
for x in list: 
    if x.game == KNOWN_GAME: 
     <show remove link> 
     flag = true 
     break 
endfor 
if flag == false: 
    <show add link> 

問題は、私はそれを行うための正しい方法を見つけることができませんです:いいえブレークはありません、作成するために、何の変数(フラグ) loop.lastをどのように使用するのか分かりません。

私はこのタグを見つけることができる任意の提案やいくつかの場所?

EDIT ビューの情報を使用する際に問題があります。私のKNOWN_GAMEはhtmlページから来ています(いくつかのforループから)。 htmlからビューの関数に渡す方法がありますか?

答えて

1

私はこれに対するより良い解決策は、あなたのviewにそのロジックを追加することだと思います。その結果のflag変数をテンプレートに渡します。とにかく私はそれにアプローチする方法です。

5

あなたがテンプレートで行うことができない多くのものに対するDjangoの答えは、ビュー内で行うことです。

一般に、複雑なロジックはすべてビューで実行する必要があります。 Djangoは、flag=Trueのように変数宣言をサポートしていません。 withタグがありますが、定義する変数は定義ブロック内で使用する必要があります。

ビュー

show_remove_link = False 
if any(filter(lambda x: x.game == KNOWN_GAME, my_list)): 
    show_remove_link = True 

return render_to_response("mytemplate.html", {'show_remove_link': show_remove_link}) 

テンプレート

{% if show_remove_link %} 
    Show Remove Link 
{% else %} 
    Show Add Link 
{% endif %} 
+0

ニース。今日何か新しいことを学びました。 – arustgi

+0

私の質問を編集してください。 – smhagut

+0

@smhagut - djangoのテンプレート変数はHTMLページから来ることはできません - それは何とかDjangoからテンプレートに渡されます。この変数は何ですか? –

0

これは、Pythonのビューで発生することになっているロジックです:

games = [x.game for x in x_list] 
game_known = KNOWN_GAME in games 
return render(request, 'my_template.html', {'game_known': game_known, ...}) 

そして、あなたが持っているテンプレートで:

{% if game_known %} 
    <show remove link> 
{% else %} 
    <show remove link> 
{% endif %} 
0

@Yujiと@Bryanが示唆するように、このロジックをビューに移動する方がよいでしょう。

また、テンプレートでこれを実現したい場合は、独自のカスタムテンプレートタグを作成できます。 documentationを参照してください。