2016-04-12 8 views
1

私は項目のリストを持っており、それぞれにチェックボックスがあります。ユーザはいくつかの項目を選択した後、質問を入力してPOSTを行う「検索」ボタンを押すことによって他の項目を検索することができる。 私は以前に選択したアイテムを失いたくはありません。だから私の見解では、私はcheckbxesの値に格納されているチェック項目IDを取得し、それらをテンプレートに再送信します。 問題は、ng-repeatを使用していて、angularJSでいくつかのフィルタリング作業を行っているため、{%for%}がアイテムのリストを作成していないため、現在のアイテムのIDがチェックされているかどうかを知ることができませんPOST後にテンプレートに渡されるIDリスト。ng-repeat内でdjangoテンプレート変数を取得

ビューコード:

if 'btn_search' in request.POST: 

     checked_ids = get_integers_from_checked_checkboxes(request, 'checkbox_parent')    
     search_query = request.POST['txtbox_search']    
     sub_queries = search_query.split(' ') 

     for sub_query in sub_queries: 

      items= all_items.filter(items__name__contains=sub_query) 

     return render_to_response('my_page.html', 
           {'items': items,         
           'checked_items' : checked_ids}, 
           context_instance=RequestContext(request)) 

単純化されたテンプレートコード:

<!-- Search --> 
<input type="text" name="txtbox_search"> 
<button name="btn_search"><b>Search</b></button> 


<!-- Items' list --> 
<input type="text" ng-model="filter_Search_box" placeholder="Filter search"> 

<ul class="list"> 

<li ng-repeat="item in items | filter:filter_Search_box"> 
    <!-- This check box should be checked if the item.id is in {{checked_items}} --> 
    <input type="checkbox" value="{/item.id/}" name="checkbox_item"/> 
    <b>{/item.name/} </b> 
</li> 

答えて

1

あなたの角度とDjangoのアプリケーション間のAjax通信を使用して検討すべきです。だからあなたのdjangoビューは、あなたの角型アプリケーションによって動的にロードされるjsonオブジェクトを返します。また、あなたは汚い方法でそれを達成できる:

views.py

from django.core import serializers 

if 'btn_search' in request.POST: 

    checked_ids = get_integers_from_checked_checkboxes(request, 'checkbox_parent') 
    search_query = request.POST['txtbox_search'] 
    sub_queries = search_query.split(' ') 

    for sub_query in sub_queries: 
     items = all_items.filter(items__name__contains=sub_query) 
    items = serializers.serialize('json', items) 
    return render_to_response('my_page.html', 
      { 
       'items': items, 
       'checked_items': checked_ids 
      }, 
      context_instance=RequestContext(request)) 

file_.html:あなたの角度コントローラの初期化中

<script> 
window.items = eval('(' + '{{ items }}' + ')'); 
</script> 

$scope.ang_items = window.items; 

を次に、 ang_itemからng-repeatを作ることができるでしょう。しかし、私はこの解決法を強く推奨しません。 また、forループ(for sub_query in sub_queries:)はすべての繰り返しで項目を上書きします。これはおそらく望ましいことではありません。 thisに精通していることをお勧めします。

+0

ありがとうございます。 私はそれを試して、それは働いた。 あなたが私に推薦したリンクを読んでいます:D –

関連する問題