2009-12-31 85 views
5

我不確定我是否僅僅是表單構建受損或者沒有考慮正確的方式。我正在嘗試構建一個類似於具有AJAX圖片上傳器的Gmail「撰寫」表單的表單。我有一部分代碼可以上傳圖片並返回一個可以正常工作的圖片ID。一旦我收到圖像ID後,我試圖將其附加到隱藏的複選框字段中的表單中。我想允許用戶上傳多個圖像,並且我還想保留所有隱藏的複選框相同的名稱,以便我可以輕鬆地迭代這些值。本質上這:HTML表單構建/ Django request.POST幫助

客戶端(這是從Gmail,但對我的這些將被隱藏):

<input type="checkbox" checked="" value="125e6e5e7d8a2601_125e6e5e7d8a2601_0.2_-1" name="attach" id=":4s"/> 
<input type="checkbox" checked="" value="125e6e5e7d8a2601_125e6e5e7d8a2601_0.1_-1" name="attach" id=":50"/> 

服務器端:

 for picture_id in request.POST["attach"]: 
      #do stuff here with the picture_id 

可惜我只收到picture_ids和請求的一個.POST [「attach」]像字符串一樣迭代它。我不知道如何解決我的問題,併發送所有圖像ID,而無需使用類似<select>的格式,因爲我必須手動添加項目並選擇它們,因此可以選擇多個項目。

希望這個解釋很清楚,我相信我只是想念一些微不足道的東西。我在這裏先向您的幫助表示感謝!

回答

17

如果你是expecting a list的關鍵attach,你應該使用request.POST.getlist('attach')。做request.POST['attach']只會給你最後一個值,其中的一個字符串。

新年快樂!

+0

+1:我剛剛學到了一些關於POST的新東西!感謝名單! – 2009-12-31 23:58:16

+0

非常感謝,這正是我一直在尋找的! :) – 2010-01-01 02:48:27

+0

+1:在新的一年在你的電腦 – Sevenearths 2011-11-02 13:42:13

0

我再次指出我的老朋友jQuery taconite plugin。如果您使用AJAX將圖像推送到服務器,請嘗試返回一個帶有多個變化的ta response響應(將ID粘在一個地方,在其他地方附加一個隱藏的input等)到您的DOM。它也可以運行JS在頁面環境中執行一些其他的事情。非常非常方便。

至於你使用多個input相同的名稱字段,我不確定它的工作方式,你想。使用Firefox的Live HTTP Headers插件,我可以看到foo=1&foo=2&foo=3&foo=4&foo=5&foo=6被傳遞 ,但PHP和Django只傳遞最後一個值,而不是數組。你可能會嘗試創建像「attach_1」,「attach_2」等名稱,只是循環你的POST值並將它們吸出來。要麼或者得到原始的POST數據並自己解析它。

查看elo80ka的答案是如何做到這一點。 (雅學習sometin'新的每一天!)