让我们说我有一个相当基本的主要应用程序,然后是一系列蓝图,这些蓝图会导致其他页面。 然后我有模块将读取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'
在蓝图方面,你如何绑定全局变量?
答案 0 :(得分:3)
如果这是一般的“全球性”数据,那么只需将其保持全球化即可。只需将其放入模块中,在模块加载时读取CSV,然后使用该数据。
其他蓝图从app对象获取配置;配置是从下一个应用程序(站点)更改的内容,但允许您重用您的蓝图。因为这样的配置与应用程序相关联,而蓝图只是读取该配置。
蓝图只是一组视图,相关的信号处理程序(before_request
,after_request
等),让您重复使用该组或轻松禁用该组视图。它们仍然在Flask应用程序的上下文中运行,因此它们始终可以访问应用程序配置。
因此,如果您希望CSV模块的路径可配置,请在应用程序配置中设置 ,并使用Blueprint.record_once()
hook根据应用程序读取CSV文件配置。