【问题标题】:SqlAlchemy query in a template page模板页面中的 SqlAlchemy 查询
【发布时间】:2015-01-18 10:32:39
【问题描述】:

我有一个这样的查询:

session.query(System).filter_by(id_system = s.id_system).join(Command).filter_by(id_command=c.id_command).first()

我想在模板页面中执行此查询(我正在使用 mako),但它不起作用:

% for c in s.commands:
    code = session.query(System).filter....
% endfor

在页面中进行查询的最佳方式是什么?还是不可能?

【问题讨论】:

  • 不,这是不可能的。您必须将包含所有信息的实例传递/(返回)到 mako 模板。并且您可以在模板中解析该信息。

标签: python sqlalchemy mako


【解决方案1】:

虽然可以通过将会话和其他需要的函数注入到模板上下文中来实现,但这不是正确的做法。大部分数据应该在模板之外处理,然后在渲染时传递给上下文。

为此模板调用渲染的视图/函数应该进行此查询并将其传递给模板。

【讨论】:

    【解决方案2】:

    模板不适合进行此类操作。所有业务逻辑都需要根据 MVC(或 RV 作为 Pyramid)范式包含在控制器中。

    在你的视图函数中查询:

    results = DBSession.query(model.Articles).all()
    return dict(status=True, results=results)
    

    或者更好地创建包含常用数据库操作的模块(然后导入函数并在视图函数中调用它)并将结果返回给模板

    import your_project.lib.dbfunctions
    results = dbfunctions.get_articles()
    return dict(status=True, results=results)
    

    比将它们用于模板:

    <div>
    % for r in results:
        ${r}
    % endfor
    </div>
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-02
      • 2022-11-04
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2014-04-26
      相关资源
      最近更新 更多