2016-04-03 7 views
0

Ich versuche, eine Dropdownliste basierend auf Spaltennamen in einer CSV dynamisch aufzufüllen, die der Benutzer hochgeladen hat. Nachdem der Benutzer die Datei hochgeladen hat (Variablenname ist Dateiname) und zur nächsten Seite/analyse/umgeleitet wird, übergibt ich den Dateinamen tatsächlich an die SimpleForm-Klasse, um die Dropdown-Liste zu generieren. Der Code ist FrageDropdownliste dynamisch auffüllen; Übergeben von "Dateiname" an SimpleForm() Klasse

form = SimpleForm(filename) 

ist, ich weiß, dass ich nicht Dateinamen direkt in der Klasse Simple (Objekt), aber wie mache ich es passieren kann?

class MultiCheckboxField(SelectMultipleField): 
widget = widgets.ListWidget(prefix_label=False) 
option_widget = widgets.CheckboxInput() 


class SimpleForm(Form): 
    list_of_files = ['Standard New/Renew/Upsell/Downsell/Churn Analysis', 'Top Ten Customer Accounts','Churn Analysis'] 
    # create a list of value/description tuples 
    files = [(x, x) for x in list_of_files] 
    test = pd.read_csv(filename, index_col = None, nrows = 0, header=0) 
    second_list = list(test.columns) 
    second_files = [(x, x) for x in second_list] 
    acheckbox = MultiCheckboxField('Label', choices=files) 
    bcheckbox = MultiCheckboxField('Label', choices=second_files) 
    categories = SelectField('Label',choices = files) 



@app.route('/', methods=['GET', 'POST']) 
    def index(): 
     if request.method == 'POST': 
      file = request.files['file'] 
      if file and allowed_file(file.filename): 
       filename = secure_filename(file.filename) 
       file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename)) 
       if columns_len(filename): 
        title = filename.split('.')[0].title() #creates the title 
        return redirect(url_for('analysis', filename=filename)) 
       else: 
        flash(u'Your CSV has less than three columns. Please re-upload', 'error') 
      else: 
       flash(u'Invalid file type. Please re-upload', 'error') 
     return render_template('index.html') 

    @app.route('/analysis/<filename>', methods=['GET','POST']) 
    def analysis(filename): 

     form = SimpleForm(filename) 
     return render_template('analysis.html', filename=filename, form=form) 

Antwort

1

Sie haben die __init__ Methode zu definieren, um den Parameter zu akzeptieren und setzen choices dort.

+0

funktionierte wie ein Charme .... Ich muss noch mehr über Klassen und Parameter lesen ... Ich werde auf jeden Fall mehr in das suchen .... danke eine Million –

Verwandte Themen