【问题标题】:How can I access this Flask global from AngularJS?如何从 AngularJS 访问这个 Flask 全局?
【发布时间】:2014-08-12 01:36:33
【问题描述】:

我正在使用连接到各种集群的 Flask 构建一个内部 Web 应用程序。 95% 的 URL 以 /cluster/cluster_name 开头,因此我在蓝图中使用以下代码:

cluster = Blueprint('cluster', __name__, url_prefix='/cluster/<cluster_name>')

@cluster.url_defaults
def add_cluster_name(endpoint, values):
    values.setdefault('cluster_name', g.cluster_name)

@cluster.url_value_preprocessor
def pull_cluster_name(endpoint, values):
    g.cluster_name = values.pop('cluster_name')

这允许我在每次请求之前使用以下代码创建与集群的连接:

@app.before_request
    def before_request():
        if not hasattr(g, 'manager'):
            g.manager = ClusterInterface(g.cluster_name)

这很好用,让我可以在 jinja2 模板中使用 {{ g.cluster_name }}。

问题是我正在迁移到前端的 AngularJS 应用程序,所以我将不再使用 jinja2 模板/render_template()。

那么我怎样才能让这个全局变量对 AngularJS 模板可用而不从每个 Flask 视图返回它的值呢?

谢谢。

【问题讨论】:

    标签: javascript python angularjs flask


    【解决方案1】:

    您的视图现在将发送 JSON 数据而不是渲染的 HTML 模板,以便与 Angular 进行通信。所以让这些数据在 JSON 响应中可用。

    return jsonify(cluster_name=g.cluster_name)
    

    更有可能的是,您应该只在首次启动 Angular 应用程序时发送默认名称和可用名称,并让它处理结束时的值。

    发送g.manager 是不可能的,因为它是一个具有(可能)复杂行为的 Python 对象,而不是 JSON 可序列化的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多