render_template()只需1个参数

时间:2015-07-08 01:58:29

标签: python flask

当我点击提交以获取以下视图时,我收到500错误。为什么我会收到此错误以及如何解决?

from flask import Flask, render_template
from flask import request, jsonify

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def homepage():
    if request.method == 'POST':
        f1 = request.form['firstVerb']
        f2 = request.form['secondVerb']
        return render_template('index.html', f1, f2)
    return render_template('index.html')

if __name__ == "__main__":
    app.run();
<form class="form-inline" method="post" action="">
<div class="form-group">
    <label for="first">First word</label>
    <input type="text" class="form-control" id="first" name="firstVerb">
</div>
<div class="form-group">
    <label for="second">Second Word</label>
    <input type="text" class="form-control" id="second" name="secondVerb" >
</div>
<button type="submit" class="btn btn-primary">Run it</button>
</form>

{{ f1 }}
{{ f2 }}

1 个答案:

答案 0 :(得分:16)

首先,当您收到500错误时,您应该考虑使用调试模式运行应用程序。你正在构建这个应用程序并且你正在调试,没有理由不去理它以隐藏你发生的事情。

if __name__ == "__main__":
    app.run(debug=True)

现在这会让你感到更兴奋:

127.0.0.1 - - [08/Jul/2015 14:15:04] "POST / HTTP/1.1" 500 -
Traceback (most recent call last):
...
  File "/tmp/demo.py", line 11, in homepage
    return render_template('index.html', f1, f2)
TypeError: render_template() takes exactly 1 argument (3 given)

有你的问题。您应该参考render_template的文档,并看到它实际上只接受一个位置参数(模板名称),但其余参数(在**context中)将作为关键字参数提供。否则在模板中无法引用您传入的变量(您必须为它们指定显式名称),因此将该调用修复为:

    return render_template('index.html', f1=f1, f2=f2)

这应该可以解决你的问题。

为了将来参考,可以通过阅读Flask documentation来解决这些问题。另外,请go through this entire Flask tutorial帮助您掌握此框架的基础知识。