2017-07-26 2 views
0

Flask Webフレームワークを使用してユーザーに質問をさせ、いくつかの特定の質問に応じて、アプリケーションはユーザーにいくつかの質問を返す必要があります。第2のウェブページ。質問に対する回答は、質問に基づいて評価され、最初のWebページに表示されます。Python Flask render_templateは、HTMLページにリダイレクトする代わりにHTMLスクリプトを返します。

model.py

### Importing Flask ### 
from flask import Flask, render_template, request, session, redirect, url_for 

### Initializing Flask ### 
app = Flask(__name__) 

@app.route('/') 
def index(): 
    return render_template('init.html') 

@app.route('/handle_data', methods = ['POST', 'GET']) 
def handle_data(): 

    ### User Inputs Question ### 
    userQuestion = request.form['userQuestion'] 

    def model(): 

     message = "Depends on User" 

     if message == "Depends on User": 

      return render_template('user_information.html', userQuestion = userQuestion) 

     else: 

      message = "Your answer is ABC." 

     return message 

    message = model() 

    return render_template('init.html', userQuestion = userQuestion, message = message) 


@app.route('/user_information', methods = ['POST', 'GET']) 
def user_information(): 

    userLevel = request.form['userLevel'] 
    userDOJ = request.form['userDOJ'] 
    userType = request.form['userType'] 

    message = "Answer for Eligibility." 

    return render_template('init.html', userLevel = userLevel, userDOJ = userDOJ, userType = userType, message = message) 

if __name__ == '__main__': 
    app.run() 

これらは私の2つのHTMLファイルです:

二user_information.html

<!DOCTYPE html> 
<html> 
<head> 
<title>Human Resources</title> 
<!-- for-mobile-apps --> 
</head> 
<body> 
    <div class="main"> 
     <div class="w3_agile_main_grid"> 
      <h2>Human Resource Portal</h2> 
      <br> 
      <p>Hi</p> 

      <form action="{{ url_for('handle_data') }}" method="post" class="agile_form"> 
       <input type="text" name="userQuestion" placeholder="Ask your question..." required=""> 
       <input type="submit" value="Submit"> 
      </form> 

      <p>{{ message }}</p> 


     </div> 

    </div> 
</body> 
</html> 

(初期のWebページ) init.htmlウェブページ)

スクリプトを実行して質問を入力すると、自分の答えとしてuser_information.htmlのHTMLコードが得られますが、これは私が望むものではありません。

出力リレー私は、[送信]をクリックした後:私は、[送信]をクリックした後 https://ibb.co/cwhRpk

期待出力を: https://ibb.co/c7CFh5

https://ibb.co/dX9T25

を私はモデルを削除する場合)(所望の出力を得る構成するが、そのことができます私の実際のアプリケーションでは、異なるパラメータでmodel()を何度も呼び出さなければならないので、私のコードは非効率になります。

私はどのようなアプローチをとるべきですか?私は完全にこの部分に立ち往生しています。ありがとう、どんな助けもありがとう!

+0

質問とは無関係ですが、ハンドラ内に異なるテンプレートをレンダリングするのではなく、 'user_information()'ハンドラにリダイレクトする方が論理的だと思います。 – Juggernaut

+0

@Juggernaut値エラーを発生させる - View関数は応答を返しませんでした。 –

答えて

1

ネストされたmodel()関数は全く意味を持ちません。 render_templateの結果を返します。これは、HTTPヘッダーなどを含む完全な応答です。別のテンプレートに挿入しようとすると、Jinjaは強制的に文字列に変換して結果を表示します。

これは、テンプレートを作成するための方法ではありません。 Jinjaはテンプレートの継承をサポートしています。共通の基盤から継承する子テンプレートを使用して、render_templateにのみ呼び出す必要があります。

+0

私のユースケースを考慮してもう少し説明できますか? –

関連する問題