[英]Django wsgi.py can't initialize the settings module: "ModuleNotFoundError: No module named 'config'"
[英]Django, use conditional settings module in wsgi.py
我在django項目中使用的是設置模塊,而不是單個設置文件。 這意味着在我的wsgi.py文件中,我有類似以下內容:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.prod")
或os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.dev")
取決於我的環境。 我真的很希望能夠在配置文件中設置一個變量,這樣我每次進入產品時都不必進入該文件並對其進行更改。
你說的沒什么大不了的? 好吧,很容易忘記,然后因為應用程序處於開發環境中而使我的應用程序不穩定。 我還將在我應用程序的其他位置使用此配置變量,因此我有一個“全局”標志,可將我的應用程序設置為生產或開發設置。
那么,如何創建三個設置文件:
在settings.py
文件的末尾檢查DEBUG=True
然后導入settings_dev.py
否則settings_prod.py
:
settings.py:
----
try:
if DEBUG:
from settings_dev import *
else:
from settings_prod import *
except ImportError:
pass
使用這種方法,您只需要設置:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
現在,不要說如果我忘記更改特定服務器的DEBUG
值該怎么辦。 那么其他的解決辦法是,有兩個不同的版本庫添加settings_prod.py
在混帳忽略開發庫列表,並添加settings_dev.py
在混帳忽略生產列表。 始終在settings_prod.py
設置DEBUG=False
,在settings.py
文件中settings_prod.py
DEBUG=True
,然后在settings.py
文件的末尾執行以下操作:
try:
from settings_dev import *
except ImportError:
try:
from settings_prod import *
except ImportError:
pass
您還可以使用環境變量(或計算機名或用戶名)來區分不同的計算機。 最好將其設置在調試器上,而不是在生產環境中設置,這樣就不會忘記它。 沿途
if "yes" == os.environ.get("DJANGO_DEBUG_ENABLED"):
DEBUG = True
# or
from settings_dev import *
else:
DEBUG = False
# or
from settings_prod import *
或者,您可以將不屬於存儲庫的文件放到那里,並檢查其存在/不存在,或從settings_local.py
導入DEBUG
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.