我是Flask的新手,我正在努力学习如何使用它。我有HTML和CSS的基础知识(足以制作简单的页面,而不是真正的幻想)。 因此,我决定给Flask一个镜头,至少设置基础看起来相当简单。
目前我正在尝试运行本地服务器(我使用的是Windows 7,Python 3.4)。根据一些说明,我设置了这样的项目:
-Flask (main folder)
routes.py
/templates
template.html
home.html
welcome.html
/static
/css
/img
/js
/font (for the moment the static folder is empty, except the subfolders)
这是template.html的结构:
<!--DOCTYPE html -->
<html>
<head>
<title>
My first Flask App
</title>
</head>
<body>
<div>
{% block content %}
{% endblock %}
</div>
</body>
</html>
home.html的:
{% extends "template.html" %}
{% block content %}
<div>
<h2>Welcome to Flask!</h2>
<br />
<p>Click <a href="/welcome">here</a>to go to the welcome page</p>
</div>
{% endblock %}
最后,welcome.html:
{% extends "template.html" %}
{% block content %}
<h2>Sample</h2>
<p>What a nice page</p>
<p>Really nice</p>
{% endblock %}
这是routes.py中的代码:
from flask import Flask,render_template
app=Flask(__name__)
@app.route('/')
def home():
return render_template('home.html')
@app.route('/welcome')
def welcome():
return render_template('welcome.html')
if __name__=='__main__':
app.run()
当我尝试运行脚本时,终端说:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
但是,当我尝试在浏览器上访问localhost:5000时,我得到了:
Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
更具体地说,终端上说:
127.0.0.1 - - [30/Jan/2016 14:45:51] "GET / HTTP/1.1" 500 -
我对HTTP状态代码知之甚少,所以我知道在出现某种错误时会引发代码500。实际上,当我查找有关此问题的信息时,我找到的每个页面(包含在stackoverflow中)都表明存在一些错误,无论是在&#34; routes.py&#34;或者在提供的html页面中。
为了确定,我尝试运行此脚本:
from flask import Flask
app=Flask(__name__)
@app.route('/')
def home():
return '''
<html>
<head>
<title>
My first Flask App
</title>
</head>
<body>
<div>
hello there!
</div>
</body>
</html>
'''
if __name__=='__main__':
app.run()
这样工作正常,服务器启动,如果我去localhost:5000我可以正确看到页面。实际上,在终端上我看到状态代码200,这意味着&#34;一切正常&#34;如果我没记错的话。 我甚至尝试添加更多路由,通过定义更多将html页面作为字符串返回的函数,并且一切正常。 我甚至尝试在这些页面上使用CSS,以三种形式(在行声明,内部样式表和外部样式表中),它都按预期工作。
所以,在最后一次尝试中,我再次运行原始routes.py
,这次是app.debug=True
这是我得到的追溯:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
Traceback (most recent call last):
File "C:\Users\Admin\pyproj\flask\routes.py", line 25, in <module>
app.run()
File "C:\Python34\Lib\site-packages\Flask-0.10.1-py3.4.egg\flask\app.py", line 777, in run
run_simple(host, port, self, **options)
File "C:\Python34\Lib\site-packages\werkzeug-0.11.3-py3.4.egg\werkzeug\serving.py", line 690, in run_simple
reloader_type)
File "C:\Python34\Lib\site-packages\werkzeug-0.11.3-py3.4.egg\werkzeug\_reloader.py", line 252, in run_with_reloader
sys.exit(reloader.restart_with_reloader())
builtins.SystemExit: 0
说真的,我必须在这里找到一些非常明显的东西:我无数次检查了所有代码。对我来说,一切似乎都很好:HTML文档中的所有标签都已正确关闭,模板的{%---%}语法似乎写得很好,routes.py
上的代码似乎也正确。此外,通常看起来Flask正在工作,因为如果我尝试将html页面作为直接写在routes.py
中的字符串返回,我可以看到页面并与页面进行交互。发生了什么事?
修改
基于大卫建议,我尝试使用app.run(debug=True,use_reloader=False)
这是追溯
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\_compat.py", line 33, in reraise
raise value
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\_compat.py", line 33, in reraise
raise value
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "x-wingide-python-shell://70495568/2", line 16, in home
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\templating.py", line 127, in render_template
return _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
File "C:\Python34\lib\site-packages\jinja2-2.8-py3.4.egg\jinja2\environment.py", line 851, in get_or_select_template
return self.get_template(template_name_or_list, parent, globals)
File "C:\Python34\lib\site-packages\jinja2-2.8-py3.4.egg\jinja2\environment.py", line 812, in get_template
return self._load_template(name, self.make_globals(globals))
File "C:\Python34\lib\site-packages\jinja2-2.8-py3.4.egg\jinja2\environment.py", line 774, in _load_template
cache_key = self.loader.get_source(self, name)[1]
File "C:\Python34\lib\site-packages\flask-0.10.1-py3.4.egg\flask\templating.py", line 64, in get_source
raise TemplateNotFound(template)
我也可以在浏览器上看到回溯。
编辑2: 感谢大卫,我尝试从命令行运行脚本,它运行得很好。通常我使用WingIDE来编写python代码,调试等等;但在这种特殊情况下,它似乎与Jinja2发生冲突。实际上,我现在测试了几次,每次使用WingIDE时,我都会获得500状态代码,当我从命令行运行脚本时(即使我只是双击脚本),它运行正常。