2010-07-25 55 views
-1

我有一個如下所示的項目列表:'Item 1', 'Item 2', 'Item 3'...列表的長度是動態的。將通過URL的項目列表傳遞到視圖

我的問題是如何將這個變量傳遞給我的視圖?

編輯1 想我要澄清我試圖:

return HttpResponseRedirect(reverse('newFeatures', 
     kwargs={'stock_number': stock_number, 'new_features': new_features})) 

隨着new_features是我的動態列表,並且newFeatures是啓動這樣一個觀點:

def add_new_feature(request, stock_number, new_features): 

不知道這是否合理,但我希望它能幫助我脫離黑暗

+0

我們是在討論將它從url conf傳遞給視圖嗎? – 2010-07-25 10:19:29

+0

不一定......讓我試試下面的the_void的答案,看看 – Stephen 2010-07-25 11:03:59

回答

0

HttpResponseRedirect只是返回一個HTTP 302重定向響應,它將重定向到另一個url。您不能使用重定向發送任何類型的POST數據,因此如果您想包含任何變量,它必須是您重定向到的url的一部分。

如果你堅持在重定向之前不處理列表,那麼你最好的選擇可能是將列表轉換爲一個字符串,並將其用作url中的參數。 newFeatures函數然後可以將該字符串解析回項目列表。

+0

實際上,如果47正在使用'reverse()'來傳遞'new_features',那麼他/她使用的是GET,而不是POST,這將允許參數改變或向前傳遞。 – 2010-07-25 15:32:34

+0

是的。通過GET發送的數據是URL的一部分,所以你和我都在考慮同樣的事情。對不起,如果我不明確。 – BernzSed 2010-07-25 19:32:43

0

如何:

return HttpResponseRedirect(reverse('newFeatures', 
    kwargs={'stock_number': stock_number, 'new_features': ','.join(new_features)})) 

和:

def add_new_feature(request, stock_number, new_features_str): 
    new_features = new_features_str.split(',') 

這是假設在new_features元素只包括那些對安全的網址字符,不包含逗號。如果情況並非如此,那麼您將不得不執行某種形式的轉義。

請記住,不建議GET風格的URL更改其目標的狀態。您應該使用POST,這會阻止您通過URL傳遞參數(即通過reverse())。另外,有時服務器對URL的長度有限制,這會妨礙GET。