Python Flask render_template返回HTML脚本,而不是重定向到HTML页面

时间:2017-07-26 08:48:54

标签: python flask

我有一个Python脚本,它使用Flask Web框架让用户提出问题,并根据某些问题,应用程序应该在第二个网页上向用户回问一些问题。问题的答案将根据问题进行评估并显示在初始网页上。

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 (第二个网页)

<!DOCTYPE html>
<html>
<head>
<title>Human Resources</title>
</head>
<body>
    <div class="main">
        <div class="w3_agile_main_grid">
            <h2>Human Resource Portal</h2>

            <form action="{{ url_for('user_information') }}" method="post" class="agile_form">
                <!--<input type="text" name="userName" placeholder="Enter your name." required="">-->
                <input type="text" name="userLevel" placeholder="What is your level?" required="">
                <input type="text" name="userDOJ" placeholder="What is your date of joining?" required="">
                <input type="text" name="userType" placeholder="Are you on sabbatical or specialist?" required="">
                <input type="submit" value="Submit">
            </form>

        </div>

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

当我执行我的脚本并输入问题时,我得到的是user_information.html的HTML代码作为我的答案,这不是我想要的。

点击提交后的输出: https://ibb.co/cwhRpk

点击提交后的预期输出: https://ibb.co/c7CFh5

https://ibb.co/dX9T25

如果删除model()构造,我可以获得所需的输出,但这会使我的代码效率低下,因为在我的实际应用程序中,我必须使用不同的参数多次调用model()。

有人可以建议我采取什么方法?我完全陷入了这一部分。谢谢,任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

您的嵌套model()函数根本没有任何意义。它返回render_template的结果,这是一个包含HTTP头等的完整响应。如果您尝试将其插入另一个模板,Jinja将被强制尝试将其转换为字符串,这会给出您看到的结果

这完全不是撰写模板的方法。 Jinja支持模板继承;你应该只使用从公共基础继承的子模板来调用render_template 一次