在Flask蓝图中保留“全局”变量

2024-04-26 18:05:21 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个相当基本的主应用程序,然后是一系列的蓝图,这些蓝图指向其他页面。 然后我有一些模块将读取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))

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

在应用程序上,我通常会:

^{pr2}$

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

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

就蓝图而言,如何绑定全局变量?在


Tags: 模块csv数据函数fromself应用程序read
1条回答
网友
1楼 · 发布于 2024-04-26 18:05:21

如果这是一个不变的数据,通常只是“全局的”,那么就保持它的全局性。只要把它放到你的模块中,在模块加载时读取CSV,然后使用这些数据。在

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

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

因此,如果希望CSV模块的路径是可配置的,请在应用程序配置中设置that,并使用^{} hook根据应用程序配置读取CSV文件。在

相关问题 更多 >