2 天前,我遇到了一个关于 Python Flask 的非常不寻常的错误。当我遇到一个令我困惑的错误时,我只是简单地编码。我正在做一门 Python 课程,该课程表明,如果我们在代码中添加一些装饰器,就可以使代码更易于阅读。当我添加与视频中所示相同的装饰器时,我遇到了一个错误,其中显示
Name error: Name @make_bold is not defined
这是代码
app = Flask(__name__)
@app.route('/')
def func():
return 'Hey'
@app.route("/bye")
@make_bold
@make_emphasis
@make_underlined
def func1():
return 'Bye'
if __name__ == "__main__":
app.run(debug=True)
Flask 是一个 Web 服务器,这意味着它可以向浏览器提供网页或其他信息,但这并不意味着它旨在创建网页。从长远来看,让 Flask 返回正确的 HTML 文档会更好,但同时,尝试在实际文本中包含使文本粗体所需的 HTML 标签,因为我认为装饰器就是这样做的(这似乎不是内置的)正在幕后进行。
@app.route("/bye")
def func1():
return '<b><i><u>Bye</u></i></b>'
另一种选择可能是自己创建装饰器。
def make_bold(func):
def wrapper(*args, **kwargs):
return '<b>' + func(*args, **kwargs) + '</b>'
return wrapper
@app.route("/bye")
@make_bold
def func1():
return 'Bye'
@Maddy Guthridge 的完美答案, 但是,如果它只是一个简单的“再见”(用于教程),请使用它,以便您理解它。
def make_bold(function):
def wrapper_function():
return '<b>' + function() + '</b>'
return wrapper_function
def make_emphasis(function):
def wrapper_function():
return '<em>' + function() + '</em>'
return wrapper_function
def make_underlined(function):
def wrapper_function():
return '<u>' + function() + '</u>'
return wrapper_function
@app.route("/bye")
@make_bold
@make_emphasis
@make_underlined
def html_style():
return 'Bye'