2009-12-31 24 views
5

मुझे यकीन नहीं है कि मैं सिर्फ खराब इमारत का निर्माण कर रहा हूं या इस बारे में सही तरीके से सोच नहीं रहा हूं। मैं जीमेल के 'कंपोज़' फॉर्म के समान फॉर्म बनाने का प्रयास कर रहा हूं जिसमें एक AJAX छवि अपलोडर है। मेरे पास कोड का एक हिस्सा है जो छवि अपलोड करता है और एक छवि आईडी ठीक काम करता है। एक बार जब मैं छवि आईडी वापस प्राप्त करता हूं तो मैंने इसे अपने प्रपत्र में एक छिपे हुए चेकबॉक्स फ़ील्ड में जोड़ने का प्रयास किया है। मैं उपयोगकर्ताओं को कई छवियों को अपलोड करने की अनुमति देना चाहता हूं, और मैं अपने सभी छिपे हुए चेकबॉक्स को भी वही नाम रखना चाहूंगा ताकि मैं आसानी से मूल्यों पर पुन: प्रयास कर सकूं। मूलतः यह:एचटीएमएल फॉर्म बिल्डिंग/डीजेगो अनुरोध। 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 ["संलग्न करें"] एक स्ट्रिंग की तरह इसे फिर से चलाता है। मुझे यकीन नहीं है कि मेरी समस्या का समाधान कैसे करें और सभी छवि आईडी को फॉर्म <select> जैसे किसी भी चीज़ का उपयोग किए बिना भेजें, जहां कई आइटम चुने जा सकते हैं क्योंकि मुझे मैन्युअल रूप से आइटम जोड़ना होगा और उन्हें चुनना होगा।

उम्मीद है कि यह स्पष्टीकरण स्पष्ट है, मुझे यकीन है कि मुझे बस कुछ मामूली याद आ रही है। अग्रिम में मदद के लिए धन्यवाद!

उत्तर

17

यदि आप कुंजी के लिए expecting a list हैं, तो आपको request.POST.getlist('attach') का उपयोग करना चाहिए। request.POST['attach'] करने से आपको केवल अंतिम मूल्य मिलेगा, जो एक स्ट्रिंग है।

नया साल मुबारक हो!

+0

+1: मैंने अभी पोस्ट के बारे में कुछ नया सीखा है! Thanx! –

+0

बहुत बहुत धन्यवाद, यह वही है जो मैं ढूंढ रहा था! :) –

+0

+1: नए वर्षों में अपने कंप्यूटर पर रहने के लिए – Sevenearths

0

एक बार फिर मैं अपने पुराने दोस्त को jQuery taconite plugin पर इंगित करूंगा। यदि आप छवि को सर्वर पर धक्का देने के लिए AJAX का उपयोग कर रहे हैं, तो एक टैकोनाइट प्रतिक्रिया लौटने का प्रयास करें जो एकाधिक परिवर्तन करता है (आईडी को एक स्थान पर चिपकता है, किसी छिपे हुए input कहीं और, आदि) को आपके डोम में जोड़ता है। यह पेज के पर्यावरण के भीतर कुछ अन्य चीजों को करने के लिए जेएस भी चला सकता है। बहुत, बहुत आसान।

जहां तक ​​आप एकाधिक input फ़ील्ड के लिए समान नाम का उपयोग करते हैं, मुझे यकीन नहीं है कि यह आपके इच्छित तरीके से काम करता है। फ़ायरफ़ॉक्स के लिए Live HTTP Headers प्लगइन का उपयोग करके मैं foo=1&foo=2&foo=3&foo=4&foo=5&foo=6 पारित कर सकता हूं लेकिन PHP और Django दोनों केवल अंतिम मान प्रदान करते हैं, न कि सरणी। आप "attach_1", "attach_2", आदि जैसे नाम बनाने का प्रयास कर सकते हैं और बस अपने POST मानों के माध्यम से लूप कर सकते हैं और उन्हें इस तरह से चूस सकते हैं। या तो कच्चे पोस्ट डेटा को प्राप्त करें या इसे स्वयं पार्स करें।

यह करने के लिए elo80ka का उत्तर देखें। (हां हर दिन कुछ नया सीखते हैं!)

संबंधित मुद्दे