Python 如何从flask上app.py呈现的HTML模板调用app.py中定义的函数

Python 如何从flask上app.py呈现的HTML模板调用app.py中定义的函数,python,flask,jinja2,Python,Flask,Jinja2,app.py-> def pretty_date(time=False): from datetime import datetime now = datetime.now() if type(time) is int: diff = now - datetime.fromtimestamp(time) elif isinstance(time,datetime): diff = now - time elif not ti

app.py->

def pretty_date(time=False):
    from datetime import datetime
    now = datetime.now()
    if type(time) is int:
        diff = now - datetime.fromtimestamp(time)
    elif isinstance(time,datetime):
        diff = now - time
    elif not time:
        diff = now - now
    second_diff = diff.seconds
    day_diff = diff.days

    if day_diff < 0:
        return ''

    if day_diff == 0:
        if second_diff < 10:
            return "just now"
        if second_diff < 60:
            return str(second_diff) + " seconds ago"
        if second_diff < 120:
            return "a minute ago"
        if second_diff < 3600:
            return str(second_diff / 60) + " minutes ago"
        if second_diff < 7200:
            return "an hour ago"
        if second_diff < 86400:
            return str(second_diff / 3600) + " hours ago"
    if day_diff == 1:
        return "Yesterday"
    if day_diff < 7:
        return str(day_diff) + " days ago"
    if day_diff < 31:
        return str(day_diff / 7) + " weeks ago"
    if day_diff < 365:
        return str(day_diff / 30) + " months ago"
    return str(day_diff / 365) + " years ago"
给出一个错误

UndefinedError:“pretty_date”未定义


有什么方法可以叫它吗?同样的app.py呈现html页面。顺便说一句。

如果我没有弄错的话,您必须通过关键字参数在
render\u模板
调用中传递要在html代码中使用的任何内容(函数、变量等)


示例:
render\u模板(“main.html”,pretty\u date=pretty\u date)
您可以在应用程序对象中注册函数,使其全局可用于jinja模板:

app = Flask(__name__)

app.jinja_env.globals.update(pretty_date=pretty_date)
现在任何模板都可以使用
{{pretty_date()}}

您还可以在调用
render\u template
时传递函数(或任何其他对象类型),但这需要对每个视图都执行,因此如果您想从多个模板调用同一函数,最好全局注册它

app = Flask(__name__)

app.jinja_env.globals.update(pretty_date=pretty_date)