2012-06-22 61 views
0

我需要創建一個頁面,其中一部分頁面是相當長的計算的結果,另一部分是顯示計算的一些中間結果的圖形。我實施它的方式是我有兩種觀點。一個視圖執行計算並將臨時結果存儲在會話變量中。第二個視圖從會話變量中檢索臨時結果,並將matplotlib的值顯示爲圖像。Django視圖同步

問題是我找不到第一個視圖完成後執行第二個視圖的方法。如果第二個視圖首先執行,那麼我會看到圖中的舊數據。

下面是一些僞代碼:

views.py:

def calc(request): 
    ... 
    do calculations 
    store interim results in session variable 
    return render_to_response(...'result':value...) 

def graph(request) 
    retrieve interim results from session variable 
    create and return HttpResponse(content_type='image/png') with graph 

urls.py:

(r'^report/$', 'calc',), 
(r'^report/graph.png/$', 'graph',), 

resultAndGraph.html:

Result: {{result}} 
<img src="graph.png" width="400" height="400"> 

回答

0

而不是使用一個會話變量,我會建議EST你設置Memcache和使用Django Caching framework

如果你想雖然使用兩種觀點,你可以從第一視圖到第二個重定向,使用HttpResponseRedirect

+0

非常感謝您的建議。我會考慮它。你對calc()和graph()的調用有同步嗎?如果我理解正確,那麼不同類型的緩存不會幫助我解決同步問題。 –

+0

我不完全確定你的意思是同步。如果您希望對第一個視圖執行一個視圖,則可以使用重定向,但載入後仍然會很慢 – cberner

0

如果你有一個長期運行的過程中,使用像celery這樣的任務隊列,並將任務卸載到單獨的進程。

在第二個視圖中,只需檢查此過程是否完成,然後顯示更新的信息(它也可以顯示過程仍在運行的通知)。

與django的集成很容易通過django-celery它使用@cberner建議的緩存機制。

+0

非常感謝您的答覆。我會試試看。 –