gpt4 book ai didi

sqlalchemy - 将 SQLAlchemy 查询传递给基本 Jinja 模板

转载 作者:行者123 更新时间:2023-12-03 16:06:07 25 4
gpt4 key购买 nike

我正在使用 Flask、SQLAlchemy 和 Jinja 创建一个应用程序。我的应用程序中几乎每个页面都使用一个 base.html 文件(它本质上是一个带有导航栏和侧边栏的外壳),然后以此为基础构建。我在 base.html 文件中显示 SQLAlchemy 查询结果的信息:

user.company.users.filter(User.account_approved == False).all()

现在我使用以下方式将它传递给单个 View :

@splash.route('/dashboard')
@login_required
def dashboard():
return render_template('templates/dashboard.html', pendingUsers=g.user.company.users.filter(User.account_approved == False).all())

但是,这只允许 base.html View 在我加载 /dashboard 路由时拥有此信息,如果我加载任何其他使用相同的路由base.html 文件,运行 {{ pendingUsers}} 输出不是文本。我怎样才能在使用 base.html 的每个路由中呈现该查询?我尝试直接在神社模板中进行查询,但我不知道该怎么做(例如,运行 {{ g.user.company.users }} 只是输出 SQL 查询SQLAlchemy 语句。

最佳答案

您正在做的事情不会起作用,因为当您在 render_template 中调用它时,您的查询不会被评估。相反,sql 查询字符串按原样发送到模板。

您可以使用自定义装饰器,因为只有想对某些 View /页面执行此操作。

def get_pending_users(f):
@wraps(f)
def decorated_function(*args, **kwargs):
pending_users = user.company.users.filter(User.account_approved == False).all()
if g.pending_users is None:
g.pending_users = pending_users
return f(*args, **kwargs)
return decorated_function

在你看来,你可以称它为:

@app.route('/',methods = ['GET','POST])
@get_pending_users
def whatever():
return render_template('templates/dashboard.html')

然后,在您的模板中,只需调用 g.pending_users

 {{ g.pending_users }}

关于sqlalchemy - 将 SQLAlchemy 查询传递给基本 Jinja 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23067086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com