2017-07-26 37 views
0

我有一个Python脚本,它使用Flask Web框架让用户提出问题并根据某些问题,应用程序应该向用户提出一些问题第二个网页。对问题的回答将根据问题进行评估并显示在初始网页上。Python烧瓶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() 

这是我的两个HTML文件:

init.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> 

user_information.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

你能解释一下我考虑一下我的用例吗? –