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

问题描述 投票:0回答:3

我目前正在使用一本名为“Head First:Python(第2版)”的书自学Python,到目前为止一直很好,但我目前仍处于构建简单webapp的早期阶段。 webapp允许用户输入短语和字母,然后输出两者的intersection。由于本书的很大一部分建立在此基础上,我无法通过跳过这一步向前推进。我一直试图找到一个错误,但无济于事。

所有代码均由本书提供: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文件夹 - > vsearch4web.py静态文件夹(webapp的子文件夹) - > hf.css(来自“静态”)模板文件夹(webapp的子文件夹) - > base.html,entry.html和results.html(来自“模板”)

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

但是,当我运行vsearch4web.py,然后进入浏览器并输入环回地址(http://127.0.0.1:5000/entry)时,我收到“500 Internal Server Error”。

然而,http://127.0.0.1:5000/http://127.0.0.1:5000/search4都工作。

我已经尝试过几次重新检查代码,但我不知道我错过了什么。

有人可以帮忙吗?

谢谢。

python python-3.x flask jinja2
3个回答
3
投票

Python中不需要-> type语法。

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

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


0
投票

从同一本书中学习......我也坚持了一两天。我的问题是我用.html命名模板但是它们保存为文本而不是html文件。要解决此问题,请打开模板,转到“另存为...”并检查下拉菜单以查看是否显示文本或html-如果它们是文本,请切换到html,然后重新保存。


0
投票

以下行导致问题:

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!')

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

© www.soinside.com 2019 - 2024. All rights reserved.