我的django项目中有几个应用程序:
DJANGO_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'django.contrib.gis.db',
]
LOCAL_APPS = [
#'cycliste' ,
#'logger' ,
'position' ,
'reseau' ,
'station' ,
#'trajet' ,
#'useful_functions' ,
'velo' ,
#'ville' ,
]
INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS
我的网址是:
urlpatterns = [
url(r'^', include('reseau.urls')),
url(r'^', include('station.urls')),
url(r'^', include('velo.urls')),
url(r'^', include('position.urls')),
]
现在,每个应用程序都是一个休息服务器。我想在我的群集的每个服务器上启动一个不同的应用程序。 我认为有两种方法可以做到:
问题是我有6个或7个应用程序。对于他们中的每一个,我只希望能够启动“站”服务器或“记录器”服务器。所以我需要在运行时动态更改LOCAL_APPS中包含的应用程序。
我尝试通过--settings命令来做,但没有运气。我试图通过一个特定的management.command来做但没有成功...最后我认为它应该更简单。 也许对设置文件进行测试?
如何动态更改INSTALLED_APPS值?
如何动态更改urlpatterns值?
答案 0 :(得分:0)
首先,我建议在每个" station"上使用django-environ动态变量。如果您已将env
应用于您的设置,请忽略此步骤:
import environ
env = environ.Env()
env_file = 'path/to/env/file.env'
if exists(env_file):
environ.Env.read_env(str(env_file))
动态更改INSTALLED_APPS值:
1)启动应用时按开关设置更改:
python manage.py runserver --settings=path.to.settings.production.station1
2)从env文件加载LOCAL_APPS:
LOCAL_APPS = ['your', 'app', 'here']
INSTALLED_APPS = DJANGO_APPS + env.list('LOCAL_APPS', default=LOCAL_APPS)
动态更改urlpatterns值:
在您的设置中更改ROOT_URLCONF
,改为从env获取:
# Define url config here
ROOT_URLCONF = env('ROOT_URLCONF', default='core.urls.development')
动态更改INSTALLED_APPS值: