2011-01-14 3 views
6

सभी वेब.py फॉर्म उदाहरण निम्न प्रारूप में हैं (webpy.org से):Web.py का उपयोग कर किसी फॉर्म में एक selectbox/dropdownbox को गतिशील रूप से कैसे भरें?

myform = form.Form( 
    form.Textbox("boe"), 
    form.Textbox("bax", 
     form.notnull, 
     form.regexp('\d+', 'Must be a digit'), 
     form.Validator('Must be more than 5', lambda x:int(x)>5)), 
    form.Textarea('moe'), 
    form.Checkbox('curly'), 
    form.Dropdown('french', ['mustard', 'fries', 'wine'])) 

class index: 
    def GET(self): 
     form = myform() 
     # make sure you create a copy of the form by calling it (line above) 
     # Otherwise changes will appear globally 
     return render.formtest(form) 

    def POST(self): 
     form = myform() 
     if not form.validates(): 
      return render.formtest(form) 
     else: 
      # form.d.boe and form['boe'].value are equivalent ways of 
      # extracting the validated arguments from the form. 
      return "Grrreat success! boe: %s, bax: %s" % (form.d.boe, form['bax'].value) 

मैं फॉर्म घोषित करते समय ड्रॉपडाउन बॉक्स (फॉर्म। ऊपर दिए गए उदाहरण में ड्रोपडाउन) को भरना नहीं चाहता , लेकिन जब पृष्ठ कहा जाता है तो डेटाबेस तालिका से पुनर्प्राप्त प्रविष्टियों का उपयोग करके GET/POST विधि में।

मैंने कुछ घंटों की खोज की है लेकिन कहीं भी संकेत नहीं मिल रहा है (google, webpy.org, google groups)

उत्तर

2

नहीं मिल सकता है मैं तुम्हें अन्य तत्वों और फार्म बनाने की सलाह है, तो प्राप्त में/पोस्ट लटकती तत्व बनाने के रूप में आप चाहते हैं और:

# Create copy of the form 
form = myform() 

# Append the dropdown to the form elements. 
form.inputs = tuple(list(form.inputs) + [mydropdown]) 
+2

मुझे नहीं लगता कि इस मामले में पैच फॉर्म के इनपुट के लिए अच्छा है (लेकिन यह किसी अन्य स्थिति में आसान हो सकता है)। इस विशेष मामले के लिए मैं 'args = []' के साथ 'ड्रॉपडाउन' बनाने का सुझाव देता हूं और फिर फॉर्म की प्रति में ड्रॉपडाउन के 'तर्क' सेट करता हूं। –

3

मैं जानता हूँ कि यह थोड़ी देर पहले पोस्ट किया गया था, लेकिन मैं मूल्य बाद में सेट करके ऐसा किया था, के रूप में:

form = input_form() 
form.get('some_input').value = _id 
return render.some_template(form) 

यह करने की अनुमति देता उपयोग अगर आप कृपया अंतर्निहित सत्यापन भी करते हैं। मैंने बोर्डों पर इस तरह का एक उदाहरण खोजना समाप्त कर दिया, इसलिए शायद यह दफन दस्तावेज के रूप में दयालु है।

4

आप खाली सूची को form.Dropdown तर्कों पर पास करके फ़ॉर्म घोषित कर सकते हैं, और फिर अपने कोड में args सेट करें।

# form declaration 
MyForm = form.Form(form.Dropdown("french", [])) 

# then in your controller 
my_form = MyForm() 
my_form.french.args = ['mustard', 'fries', 'wine'] 

इसके अलावा web.form साथ नाम टकराव की वजह से चर के लिए form का उपयोग नहीं करें।