2012-02-26 10 views
0

私は多くのタブ(jQueryのUI)でテンプレートを持っている:のjQuery UIのタブ

<div> 
    Satus: <span id="status_value"> {{ purchase.get_status_display }}</span> 
    Owner: <span id="admin_value"> {{ purchase.owner }}</span> 
    </div> 

    <div class="tabs"> 
     <div class="tabs-navigation"> 
      <ul> 
       <li><a href="{% url purchase_info_tab %}">Purchase description</a></li> 
       <li><a href="{% url purchase_catalog %}">Purchase catalog</a></li> 
      </ul> 
     </div> 
    </div> 

これはview.pyですが、私の最初は、この場合のpurchase_info_tabでは、AJAXタブをレンダリング使用するよりもメインテンプレートを、レンダリング私はモデルを購入する必要があり、purchase_info_tabにはモデルの購入が必要です。私たちは2つの同一のクエリを持っています。俺はこれをどうにかして避ける?

@render_to('app/purchase_view.html') 
def purchase_view(request, purchase_id): 

    try: 
     purchase = Purchase.objects.get(id=purchase_id) 
    except Purchase.DoesNotExist: 
     raise Http404() 

    return { 
     'purchase': purchase, 

    } 

@render_to('app/tabs/info_tab.html') 
def purchase_info_tab(request): 

    purchase = #I load one model twice in one page 

    try: 
     itemsgroups = ItemsGroup.objects.filter(purchase=purchase).all() 
    except IndexError: 
     raise Http404() 

    return { 
      'itemsgroups': itemsgroups, 
     } 
+0

'Purchase'オブジェクトの作業をキャッシュするのでしょうか? – dm03514

+0

? 1つの購入をリクエストする – mikhail

答えて

0

ビューのDjangoの観点から、あなたの2つのビューが完全に独立であり、あなたは(ビュー方法が異なる上でも実行することができることを覚えて、このようなURLパラメータまたはセッションなど、いくつかの第3の場所でそれをスタッシュすることなく、それらの間で情報を共有することはできませんサーバーは、アプリケーションの展開方法によって異なります)。

ただし、この例では、必要はありません。あなたはItemsGroupを得るためにあなたの購入のオブジェクトを取得する必要はありません:あなたはあなたのクエリにIDを渡すことができます。

itemsgroups = ItemsGroup.objects.filter(purchase__id=purchase_id).all() 
+0

"あなたの2つのビューは完全に別個であり、それらの間で情報を共有することはできません。本気ですか ?セッション、キャッシュ、URLパラメータ...は解決策です。 – jpic

+0

私は、質問を違った方法で解釈していると思います。私が理解した質問は、購入の第2のクエリを回避する方法でした。私はあなたが最初のものからどのオブジェクトが手元にあったのかを覚えておく方法として解釈していると思います。購入オブジェクトを別の場所(セッションストア内)に格納してから、DBからフェッチするだけでなく、必ずしも効率的ではありません。 – kdt

0

これを回避するために多くの方法があります。

最も簡単なのような、sessionsを使用することです:

@render_to('app/purchase_view.html') 
def purchase_view(request, purchase_id): 

    try: 
     purchase = Purchase.objects.get(id=purchase_id) 
    except Purchase.DoesNotExist: 
     raise Http404() 
    else: 
     request.session['purchase'] = purchase 

# [snip] 

@render_to('app/tabs/info_tab.html') 
def purchase_info_tab(request): 

    purchase = request.session['purchase'] 

    # [snip] 
+1

これは難しいことです:ユーザが異なる購入のために2つのページを同時に開いた場合、一方のタブが他方のページに読み込まれる可能性があります。 – kdt

関連する問題