Voici ma situation...
J'essaie de générer dynamiquement un tas de choses dans mon fichier settings.py sur un site django.
Je suis en train de mettre en place plusieurs sites, (via sites framework) et je voudrais avoir quelques valeurs que j'insère dans une fonction qui va générer une partie du fichier de paramètres pour chaque site.
par exemple :
from universal_settings import *
SITE_NAME = 'First Site'
SITE_SLUG = 'firstsite'
DEFAULT_FROM_EMAIL = '%s <noreply@otakupride.com>' % SITE_NAME
ROOT_URLCONF = 'mysite.urls.%s' % SITE_SLUG
TEMPLATE_DIRS += ( os.path.join(PROJECT_ROOT, "templates", SITE_SLUG), )
il est évident que c'est une énorme violation de DRY que d'avoir ces 3 dernières lignes dans le fichier de configuration pour chaque site utilisant ce code. Je veux donc faire quelque chose comme ceci
from universal_settings import *
from utils import get_dynamic_settings
SITE_NAME = 'First Site'
SITE_SLUG = 'firstsite'
get_dynamic_settings( locals() )
Et voici la fonction
# WARNING: THIS CODE DOES NOT WORK!
def get_dynamic_settings(context_dict):
global DEFAULT_FROM_EMAIL
global ROOT_URLCONF
global TEMPLATE_DIRS
DEFAULT_FROM_EMAIL = '%s <noreply@otakupride.com>' % context_dict['SITE_NAME']
ROOT_URLCONF = 'mysite.urls.%s' % context_dict['SITE_SLUG']
TEMPLATE_DIRS += ( os.path.join(PROJECT_ROOT, "templates", context_dict['SITE_SLUG']), )
Ma question est donc la suivante : comment puis-je ajouter des éléments au champ d'application du fichier de configuration ? dictée disponible pour les variables qu'il contient.
Peut-être que je m'y prends mal ? Merci de votre aide !
PS - ma compréhension de la global
est qu'il indique au compilateur que la fonction a pour but de manipuler une variable globale dans son propre fichier - Existe-t-il une telle chose pour le fichier dans lequel la fonction est appelée ?