2016-04-03 17 views
0

için "dosyaadı" iletme Bir kullanıcının yüklediği bir csv içindeki sütun adlarını temel alarak bir açılır kutuyu dinamik olarak doldurmaya çalışıyorum. Kullanıcı dosyayı yükledikten (değişken adı dosya adı) ve bir sonraki sayfaya yönlendirildikten sonra/analysis /, aslında açılan listeyi oluşturmak için dosya adını SimpleForm (form) sınıfına nasıl geçiririm? kod soru, açılır kutuyu dinamik olarak doldurur; SimpleForm() Sınıfı

form = SimpleForm(filename) 

olduğu I (nesne) Sınıf SimpleForm doğrudan dosya adı geçemez biliyorum ama bunu nasıl yapacağım?

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) 

cevap

1

Sen parametreyi kabul etmek __init__ yöntemi tanımlamak zorunda ve orada choices ayarlayın.

class SimpleForm(Form): 
    acheckbox = MultiCheckboxField('Label') 
    bcheckbox = MultiCheckboxField('Label') 
    categories = SelectField('Label') 

    def __init__(self, filename, *args, **kwargs): 
     super(SimpleForm, self).__init__(*args, **kwargs) 

     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] 

     self.acheckbox.choices = files 
     self.bcheckbox.choices = second_files 
     self.categories.choices = files 
+0

bir çekicilik gibi çalıştı .... Derslerde ve parametrelerle ilgili daha fazla okuma yapmam gerekiyor ... Kesinlikle buna daha çok bakmaya başladım .... teşekkürler milyon –

İlgili konular