2011-11-14 151 views
0

我有一個包含多個表單的搜索頁面的網站,以及一個顯示搜索結果的頁面。我希望用戶能夠下載搜索結果(作爲文本文件或其他)。在Django中下載對象的子集

這基本上就是我的看法是這樣的:

def search_page(request): 
    form = SearchOptions() 
    if request.method == 'POST': 
     #filter the objects based on the input in the forms 
     return render_to_response('results.html', {'filtered_objects' : filtered_objects}, context_instance=RequestContext(request)) 

    else: 
     return render_to_response('search_page.html', {'form' : form}, context_instance=RequestContext(request)) 

在理想情況下,我想喜歡

def download(filtered_objects): 
    #process file 
    return downloadable_file 

處理下載另一種觀點認爲,這是我有一個可行的下載視圖(它讓我下載一個虛擬文件),但我不知道如何將filtered_objects傳遞給它。

回答

2

你可以定義一個基於搜索參數,返回的搜索結果的實用搜索功能;並留給視圖來調用這個函數,並處理結果應該如何呈現(html或csv下載或json或其他)。

或者,您可以在視圖中添加一個參數(在url中或作爲get參數),以定義輸出格式並返回相應的響應。儘管對無效參數保持警惕。

+0

我正在考慮創建一個單獨的搜索功能,但是我不需要過濾對象兩次然後(一次用於在頁面上顯示它們,一次用於下載)?如果可能的話,我想避免這種情況。 –

+0

然後,您需要以某種方式存儲結果並允許用戶檢索結果。也就是說,你正在研究緩存。您可能需要爲搜索生成唯一的密鑰(例如,基於搜索參數的哈希值),以及如果您希望基於時間的無效操作生成時間戳。然後,您可以將搜索結果(或關聯的項目PK)存儲在緩存中(memcached,或者如果您想要更簡單的方法,請將其存儲在request.session中),然後將該緩存鍵放在窗體中或作爲get參數傳遞您的csv導出視圖。 –