2017-05-07 2 views
0

対応する列を選択してcsvファイルをMysqlにアップロードしようとしましたが、問題がルートを変更するとファイルが閉じられます。 私は2つのテンプレートを同じルートにレンダリングしようとしました。最初にファイルをロードし、2番目のテンプレートを列を選択するようにしました。私は最初のテンプレートだけにアクセスできます。 私は(env.is_submittedと第二のフォームをテストしてい)が、私はそれがフラスコは異なるファイルで2つのフォームをレンダリングしますが、最初のフォームしか取得できません

 {% block body %} 
     <form name = "mapping" method="POST" enctype="multipart/form-data" > 
      {{ env.hidden_tag() }} 
      <table> 
     {% for csv in columnscsv %} 
     <tr> <td> {{ csv }}</td> 
      <td><select name = "{{ csv }}" >  
      <option >year </option> 
      <option >month</option> 
      <option >day</option>  
      <option>reference</option> 
      <option>designation</option> 
      </select></td> 
     </tr> 
     {% endfor %} 
     </table> 
      <input type="submit" value="Submit" name = "submit" > 
      </form> 

     {% endblock %} 
form.html

@app.route('/upload', methods=['GET', 'POST']) 
    def upload(): 
    form = UploadForm() 
    global columnscsv, salessource 
    if form.validate_on_submit(): 
     try: 
     filename = secure_filename(form.csv.data.filename) 
     file = form.csv.data 

     if file and allowed_file(filename):     
      print 'file_path'     
      salessource = CSVSource(file, delimiter=',') 
      columnscsv = salessource.fieldnames 
      print columnscsv 

     finally: 
      return render(salessource) 
    return render_template('upload.html', form=form) 

    def render(salessource): 
     env = envForm() 
     if env.is_submitted(): 
      print "submitted" 
     return render_template('form.html',columnscsv = columnscsv ,env =env) 

upload.html

<html> 
    <head> 
    <title>Upload</title> 
     </head> 
    <body> 
     <form method="post" enctype="multipart/form-data" > 
     {{ form.hidden_tag() }} 
     {{ form.csv }} 
     <input type="submit"> 
    </form></body> 
    </html> 

"を提出した" 印刷し提出しておりません場合でも、

答えて

0

あなたのform.htmlは、フォームを送信するときにのみ表示されます(render(salessource)は送信フォームのチェックの中にあった)ので、とにかく "Submitted"をこの方法で印刷しないとわかりません。あなたは2つのテンプレートをレンダリングしたい場合

、私はこのような作業をarroundの発見:ファイルが後に提出

  • が戻って自分自身にリダイレクト提出された場合

    • が知る一時ようsession['fileName'] = filenameを追加
    • チェックsession['fileName']は、レンダリングするためにどのようなテンプレートを選択するために存在している場合

      @app.route('/upload', methods=['GET', 'POST']) 
      def upload(): 
          form = UploadForm() 
          global columnscsv, salessource 
          if form.validate_on_submit(): 
           try: 
            filename = secure_filename(form.csv.data.filename) 
            file = form.csv.data 
            session['fileName'] = filename 
      
            if file and allowed_file(filename):     
             print 'file_path' 
             salessource = CSVSource(file, delimiter=',') 
             columnscsv = salessource.fieldnames 
             print columnscsv 
            redirect(url_for('upload')) 
           except: 
            raise 
      
          if session.get('fileName') != None: 
           render_template('form.html',columnscsv = columnscsv ,env=env) 
          else: 
           return render_template('upload.html', form=form) 
      
  • +0

    ありがとうございますが、私はまだそれを得ることはできませんform.htmlのフォームにアクセスするにはどうすればいいですか – nourelhouda

    +0

    'アクセス'の詳細について教えてください –

    +0

    私はテンプレートを 'form.hml'フォームのタグにアクセスします。さて、私は他の解決策を見つけました。ファイルをローカルにアップロードして再利用します。ありがとうございました – nourelhouda

    関連する問題