有一个叫@make_bold的flask函数吗?我很困惑,因为我无法在任何地方找到答案

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

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)
python flask decorator
2个回答
4
投票

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'

0
投票

@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'
© www.soinside.com 2019 - 2024. All rights reserved.