使用Flask和Jinja时出现500内部服务器错误

问题描述:

我目前自学自己的Python,使用名为“Head First:Python(2nd Edition)”的书,迄今为止它一直很好,但我目前陷入困境建立一个简单的webapp的早期阶段。 Web应用程序允许用户输入短语和字母,然后输出两者的intersection。由于本书的很大一部分都是基于这一点,所以我不能通过跳过这一步向前迈进。我一直在试图找到一个错误,但无济于事。使用Flask和Jinja时出现500内部服务器错误

所有代码都是由这本书在提供:http://python.itcarlow.ie/ed2/ch05/webapp/

文件夹中的文件vsearch4web.py是最后的版本,所以请不要使用。这是我在用,而不是我的vsearch4web.py文件夹:

from flask import Flask, render_template 
from vsearch import search4letters 

app = Flask(__name__) 

@app.route('/') 
def hello() -> str: 
    return 'Hello world from Flask!' 

@app.route('/search4') 
def do_search() -> str: 
    return str(search4letters('life, the universe, and everything','eiru,!')) 

@app.route('/entry') 
def entry_page() -> 'html': 
     return render_template('entry.html',the_title='Welcome to search4letters on the web!') 

app.run() 

我已经设置了文件夹结构的指示:

WebApp文件夹 - 的webapp> vsearch4web.py 静态文件夹(子文件夹) - > hf.css(来自“static”) 模板文件夹(webapp的子文件夹) - > base.html,entry.html和results.html(来自“模板”)

静态文件文件夹和模板文件夹可在本书提供的上述URL中下载。

但是,当我运行vsearch4web.py,我去我的浏览器并输入回环地址(http://127.0.0.1:5000/entry),我得到一个“500内部服务器错误”。

http://127.0.0.1:5000/http://127.0.0.1:5000/search4都可以工作。

我试过重新检查代码几次,但我不知道我失踪了什么。

有人可以帮忙吗?

谢谢。

+1

'html'不是Python类型 –

+1

尝试'app.run(debug = True)'但是在猜测它找不到你的模板文件夹,或entry.html –

-> type语法在Python中不是必需的。

您应该阅读您的服务器日志,看看def entry_page()未正确定义。

使用正确类型的render_template(一Response,我认为),或只是将其删除

+0

谢谢,但所有这些都是新的我。任何想法如何我可以读取我的服务器日志,我应该注意什么? – paulnsn

+1

这取决于你如何/在哪里开始烧瓶。例如,只需运行'python vsearch4web.py',您的日志将立即在该终端会话中可用 –

来自同一本书的学习......我被困在对于一两天为好。我的问题是我用.html命名了模板,但它们保存为文本而不是html文件。要解决这个问题,打开你的模板,进入“另存为...”并检查下拉菜单是否显示文本或html-如果它们是文本,切换到html并重新保存。

下面的行导致该问题:

def entry_page() -> 'html': 

使用注释(->)仅与Python类型可能和衍生(如strdictintfloat,等...)。

由于事实上,你甚至不必在Python在所有使用注释:

@app.route('/entry') 
def entry_page(): 
    return render_template('entry.html',the_title='Welcome to search4letters on the web!') 

通过render_template返回的Response对象将有正确的“类型”,这是由确定Content-Type: text/html; charset=utf-8在响应头中(而不是你的路由的返回值)。