cor*_*vid 1 python flask python-2.7
假设我有一个相当基本的主应用程序,然后是一系列通往其他页面的蓝图。然后我有模块可以读取 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))
Run Code Online (Sandbox Code Playgroud)
我想在我的蓝图中使用这个模块来包含数据。
在应用程序上,我通常会这样做:
app.config['python'] = python_csv('/path/to/file')
Run Code Online (Sandbox Code Playgroud)
当我尝试使用蓝图执行此操作时,会引发以下错误:
AttributeError: 'Blueprint' object has no attribute 'config'
Run Code Online (Sandbox Code Playgroud)
从蓝图的角度来看,您将如何绑定全局变量?
如果这是一般“全局”的不变数据,则将其保持为全局即可。只需将其放入模块中,在模块加载时读取 CSV,然后使用该数据即可。
否则,蓝图会从应用程序对象获取配置;配置是一个应用程序(站点)与下一个应用程序(站点)之间发生变化的内容,但允许您重用您的蓝图。由于此类配置与应用程序相关联,并且蓝图仅读取该配置。
蓝图只是视图组、关联的信号处理程序(before_request
、after_request
等),让您可以重用该组或轻松地禁用该组视图。它们仍然在 Flask 应用程序的上下文中运行,因此它们始终可以访问应用程序配置。
因此,如果您希望 CSV 模块的路径可配置,请在应用程序配置中进行设置,并使用挂钩Blueprint.record_once()
根据应用程序配置读取 CSV 文件。