2010-10-01 37 views
0

我有兩個觀點:傳遞變量beween意見

def importContent(request):  
    d = get_some_data() 
    t = get_template('import.html') 
    c = Context({'entries' : d.entries }) 

    return HttpResponse(t.render(c)) 

def doImport(request): 
    return HttpResponse("hey") 

這裏是import.html:

{% for entry in entries %} 
    {{ entry.title}} <br> 
{% endfor %} 

<a href="/do_import">soo</a> 

用戶開放importContent()取景並按下鏈接,打開日doImport()查看。我怎樣才能從importContent()視圖傳遞d變量到doImport()視圖?

回答

2

我可以想到幾種方法來解決這個問題。

第一個要求您啓用sessions。在這個機制中,第一個視圖會將變量存儲在用戶的會話中,第二個會檢索它。對於例如

def importContent(request):  
    d = get_some_data() 
    t = get_template('import.html') 
    c = Context({'entries' : d.entries }) 
    request.session['entries'] = d 
    return HttpResponse(t.render(c)) 

def doImport(request): 
    if 'entries' in request.session: 
     d = request.session['entries'] 
    else: 
     d = # Perform a look up or show a message etc. 
    return HttpResponse("hey") 

該會話也可以用自定義緩存代替。

第二個是讓第二個顯式查找數據。如果數據有限並且不需要任何廣泛的計算,這更容易。

1

如果您想要將所有條目傳遞迴doImport,它並不容易。在請求中傳遞參數的方法是將它們放入url中,使用post請求或使用會話,但這需要更多工作。

使用URL並不方便,因爲該網址上會有很多參數。

使用帖子有點怪異,不適合html鏈接。

使用會話需要認證和使用用戶。

你就不能叫:

d = get_some_data() 

在doImport一遍嗎?

+1

一個會話不需要認證 - 任何AnonymousUser都會得到她自己獨特的sessionid – 2010-10-01 13:26:48

+0

謝謝,我沒有意識到這一點。 – 2010-10-01 13:38:05