2014-03-19 92 views
0

比方說,我有一個相當基本的主應用程序,然後是一系列導致其他頁面的藍圖。 然後我有一個會讀一個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') 

當我嘗試使用Blueprint要做到這一點,它提出了以下錯誤:

AttributeError: 'Blueprint' object has no attribute 'config' 
的藍圖方面

,你將如何綁定一個全局變量?

回答

3

如果是這樣,這只是一般「全球性」的不變數據,只要保持全球。只需將它放入模塊中,在模塊加載時讀取CSV並使用該數據。

藍圖以其他方式從應用程序對象中取得配置;配置是從下一個應用程序(站點)更改的內容,但可讓您重用您的藍圖。由於此類配置與應用程序綁定,並且藍圖僅讀取該配置。

藍圖只是視圖組,關聯的信號處理程序(before_requestafter_request等),可讓您重用該組或輕鬆禁用該組視圖。它們仍然在Flask應用程序的上下文中運行,所以它們將始終可以訪問應用程序配置。

因此,如果你想要的路徑CSV模塊是可配置的,在您的應用程序configuraton設置,並使用Blueprint.record_once() hook閱讀基於應用程序配置CSV文件。