2017-02-05 1 views
0

Ich bin neu bei der Webpy. Momentan habe ich Probleme, die im Dropdown-Menü ausgewählten Elemente abzurufen, und ich habe keine Hilfe darauf gesehen. Kann mir jemand zeigen, wie ich das Problem lösen kann?So erhalten Sie ausgewählte Artikel aus Webpy dropdown

Dank

Mein Python-Server:

import web 
import pdb 
from matching_tester import * 

def make_text(string): 
    return string 

class tutorial: 
    def GET(self): 
     form = my_form() 
     return render.tutorial(my_form(), "Your text goes here.") 
    def POST(self): 
     form = my_form() 
     form.validates() 
     s = form.d.Devices 
     print s 
     return make_text(s) 

if __name__ == '__main__': 
    urls = ('/', 'tutorial') 
    render = web.template.render('templates/') 

    app = web.application(urls, globals()) 

    my_form = web.form.Form(
        web.form.Dropdown('Devices', [('1', 'iPhone 4'), 
                ('2', 'iPhone 4S'), 
                ('3', 'iPhone 5')], 
                web.form.notnull, 
             **{'multiple':None, 'size': 4}), 
        web.form.Dropdown('Country', [('1', 'All'), 
                ('2', 'US'), 
                ('3', 'JP')],   
               web.form.notnull, 
             **{'multiple':None, 'size': 4}) 
        ) 
    app.run() 

Mein HTML:

=== tutorial.html === 
$def with (form, text) 
<!doctype html> 
<html> 
    <head> 
     <title>Python and AJAX tutorial for beginners with webpy and jQuery</title> 
     <link rel="stylesheet" type="text/css" href="/static/tutorial.css" /> 
     <script type="text/javascript" src="/static/jquery.js"></script> 
     <script type="text/javascript"> 
           jQuery(document).ready(function() { 
           jQuery(".button").click(function() { 
             var input_string = $$("input#textfield").val(); 
             jQuery.ajax({ 
               type: "POST", 
               data: {textfield : input_string}, 
               success: function(data) {             jQuery('#foo').html(data).hide().fadeIn(1500); 
               }, 

               }); 
             return false; 
             }); 
           }); 
         </script> 
    </head> 
    <body> 
     <br> 
     <form class="form" method="post"> 
     $:form.render() 
     <input class="button" type="submit" value="send"/> 
     </form> 
     <br><br> 
     <span id="foo">$text</span> 
</form> 
    </body> 
</html> 
+0

egal was ich wähle, print s gibt keine –

Antwort

0

Sie sind zu hart arbeiten:

Ihr Python-Code ist gut. Dein HTML ist in Ordnung, aber das eingebettete Javascript ist das Problem.

Insbesondere ist Ihr Anruf an var input_string = ... schlecht (und unnötig). Sie haben kein Eingabeelement mit der ID textfield. Egal, du brauchst es nicht.

In Ihrem Ajax-Anruf senden Sie schlechte Daten, den Wert von Textfeld. Stattdessen serialisieren Sie einfach das Formular und senden Sie die folgende Info:

+0

Vielen Dank. Ich habe Stunden damit verbracht. Nur noch eine Frage. Bisher, wenn ich mehrere Einträge auswähle, bekam ich nur einen im Python-Skript. Wie bekomme ich eine Reihe von Eingaben aus dem Dropdown? –

+0

@NanMa Ehrlich gesagt, finde ich den 'Form'-Code nicht die Mühe wert: Schreibe deine eigenen. Form.Dropdown unterstützt nur einzelne Einträge. Docs sagen, "sich gegenseitig ausschließende Eingabe für Listen (Auswahl und Optionen)". Der Browser sendet jedoch mehrere Ergebnisse, und Sie können sie in Ihrem POST lesen, aber Sie müssen etwas wie 'device_list = web.input (Devices = []). Devices' verwenden. 'web.input()' gibt immer Benutzereingabe dict zurück. Wenn Sie 'Devices = []' sagen, sagen Sie 'web.input()', dass Devices Listentyp ist, und nicht ein Singleton. Ich weiß nicht, ob der integrierte Dropdown-Validator ordnungsgemäß mit Listen funktioniert. – pbuck

+0

Vielen Dank für den Kommentar. Das war genau das, was ich letzte Nacht getan habe. Ich habe das Dropdown von python auskommentiert und habe es bei HTML gemacht. Kennen Sie ein anderes gutes Python-Framework, das gut für das Web ist? Der Grund, warum ich Webpy Picker war wegen der ich habe einen großen Teil der Backend-Verarbeitung in Python Vielen Dank –

Verwandte Themen