2014-05-05 55 views
0

我想在我的settings.py文件中定義一個常量變量,它將在整個應用程序中可用。
即,如果我在settings.py做,例如:
VAR = [1,2,3]python django設置執行sql語句

然後我認爲我可以訪問它喜歡:
VAR = settings.VAR

但是,我希望VAR會從數據庫中獲取。
表示當我的應用程序啓動時,執行SQL並將答案加載到VAR。

所以我試圖在views.py,做創建一個函數:

def loadVAR(): 
... # perform sql 
return VAR 

,並在settings.py:

import myapp.views 
VAR = myapp.views.loadVAR() 

在views.py

但它不起作用,我得到一個「500內部服務器錯誤」 我也沒有設法直接在設置中執行SQL。

我該如何做到這一點?

回答

0

您可以觸摸視圖之前實現這一目標使用中間件,

class ModelMiddleware(object): 
    """ 
     Model data 
    """ 
    def process_request(self, request): 

     # Fetch your data 
     # Append var data to request 
     request.META['VAR'] = [1, 2, 3] 
     return None 

可以使用要求得到鑑於VAR,

def veiw_data(request,): 
    print request.META['VAR'] 

這裏是How to set django middleware in settings file

更新:

如果你想調用SQL只有第一次項目加載你SE這種方式,

我想象我的項目結構這樣,

mysite/ 
    mysite/ 
    __init__.py --> Add the logic in this file, 
    urls.py 
    settings.py 
    test.py 
    manage.py 

__init__.py

from catalog.models import Product 
import settings 

settings.VAR = Product.objects.all() 

完成。您可以訪問項目中的VAR。希望這可能會有所幫助

+0

但是,中間件不是要在每個請求上運行嗎?我不需要它那樣工作。我只想在服務器內存中存儲一​​些數據,這些數據可以在應用程序中訪問,供每個用戶使用(與會話不同)。我需要執行這個只能拉一次這個數據的SQL,我不想爲每個用戶執行它。 – user3599803

+0

@ user3599803我更新了我的答案。 – dhana

+0

優秀。我從來沒有想過使用這個init.py文件(以前是空的)。但是,它的工作! – user3599803

0

settings.py並不意味着以這種方式使用,如果你想在數據庫中存儲一些設置,可以考慮使用一些專門爲此設計的外部包,這裏有the list其中一些。

+0

我不想在我的數據庫中存儲「設置」,我需要一些數據庫數據在我的應用程序和設置中可用。py似乎是唯一具有在應用程序中始終可用的變量的文件(與views.py中的不同 - 在迴應後清除內存)。但我不介意爲此創建另一個文件,該文件將包含一些代碼和數據,這些代碼和數據將在應用程序啓動時執行,並且在應用程序停止之前不會清理。這實際上是我需要的。 – user3599803