保持"全球"烧瓶蓝图中的变量

时间:2014-03-19 18:06:18

标签: python python-2.7 flask

让我们说我有一个相当基本的主要应用程序,然后是一系列蓝图,这些蓝图会导致其他页面。 然后我有模块将读取csv并使用数据来执行功能

from py_csv_entry import entry
class python_csv:
  def __init__(self, csv_location):
    self.data = []
    self.read_csv(csv_location)

  def read_csv(self):
    with open(csv_location + 'python_csv.csv') as csv_data:
      read = csv.reader(csv_data):
      for row in read:
        self.data.append(entry(*row))

我想在我的蓝图中使用此模块来包含数据。

在应用上,我通常会这样做:

app.config['python'] = python_csv('/path/to/file')

当我尝试使用蓝图执行此操作时,会引发以下错误:

AttributeError: 'Blueprint' object has no attribute 'config'

在蓝图方面,你如何绑定全局变量?

1 个答案:

答案 0 :(得分:3)

如果这是一般的“全球性”数据,那么只需将其保持全球化即可。只需将其放入模块中,在模块加载时读取CSV,然后使用该数据。

其他蓝图从app对象获取配置;配置是从下一个应用程序(站点)更改的内容,但允许您重用您的蓝图。因为这样的配置与应用程序相关联,而蓝图只是读取该配置。

蓝图只是一组视图,相关的信号处理程序(before_requestafter_request等),让您重复使用该组或轻松禁用该组视图。它们仍然在Flask应用程序的上下文中运行,因此它们始终可以访问应用程序配置。

因此,如果您希望CSV模块的路径可配置,请在应用程序配置中设置 ,并使用Blueprint.record_once() hook根据应用程序读取CSV文件配置。