2012-02-26 48 views
0

我有模板有許多選項卡(jQuery用戶界面):在Django模板的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,首先我主要呈現模板,比使用AJAX渲染選項卡,在這種情況下purchase_info_tab ,主模板我需要模型Purchase和purchase_info_tab我需要Model購買,並且我們有兩個相同的查詢。我以某種方式避免這種情況?

@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 2012-02-26 15:24:09

+0

怎麼樣?一個請求一次購買 – mikhail 2012-02-26 15:32:24

回答

0

從Django的角度來看,你的兩個觀點是完全獨立的,你不能沒有一些第三位置積攢它如一個URL參數或會話(記住,視圖方法甚至可以在不同的運行它們之間共享信息服務器取決於應用程序的部署方式)。

但是,在你給出的例子中,沒有必要。你不必檢索您的購買對象,以獲得ItemsGroup:你可以傳遞一個ID到你的查詢:

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

「你的兩個觀點完全分開,你不能在他們之間分享信息。」你確定 ?會話,緩存,網址參數...都是解決方案。 – jpic 2012-02-29 14:42:49

+0

我認爲我們正在以不同的方式解釋這個問題。我理解的問題是如何避免購買的第二個查詢。我認爲你正在將它解釋爲如何記住哪個對象與第一個對象相關。您建議將Purchase對象存儲在其他地方(在會話存儲區中),然後檢索它,不一定比從數據庫中再次獲取它更高效。 – kdt 2012-03-01 15:14:20

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

這很活潑:如果用戶同時打開兩個頁面用於不同購買,那麼一個標籤可能會加載另一個頁面。 – kdt 2012-03-01 15:12:01