2017-03-17 4 views
0

Je cherche un moyen de définir un certain nombre de variables à l'échelle du site (ou de l'application), comme un titre de site Web (ou app) par exemple, que j'utiliserais dans mes templates (dans mon entête par exemple). J'ai quelque chose comme WordPress 'bloginfo() à l'esprit.Django - Définir et utiliser des variables à l'échelle du site à utiliser dans les modèles

Idéalement, j'aimerais pouvoir définir n'importe quel type d'attribut au niveau d'un site ou d'une application. Pour une application donnée, par exemple, je dois:

app

--attribute1 (par exemple titre)

--attribute2 (par exemple e-mail de contact)

--Model1

---- AttributeX

---- AttributeY

- ---

Signification que "attribut1" serait unique à mon application. J'aurais alors besoin d'un moyen d'utiliser la valeur de attribute1 dans mes templates. J'espère que ma question est claire.

Répondre

1

J'utilise des variables à l'échelle du site (ou de l'application) tout le temps en utilisant context processors.

l'intérieur de votre application créer un fichier séparé appelé context_processors.py (inutile de dire que ce n'est pas obligatoire de le nommer comme ça, il est juste pour la convention) et ce fichier doit définir au moins une fonction qui accepte un paramètre request et retourne un dictionnaire.

Quelque chose comme ça:

# yourapp/context_processors.py 

def static_vars(request): 
    return = { 
     'var1': 'Hello', 
     'var2': 'World', 
    } 

Maintenant, avant d'accéder à des variables dans vos modèles comme {{ var1 }}, vous devez transmettre cette fonction aux TEMPLATES paramètres comme ceci:

# settings.py 

TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [ 
     # dirs here 
    ], 
    'OPTIONS': { 
     'context_processors': [ 
      # some other context processors here and ... 
      'yourapp.context_processors.static_vars', 
     ], 
     'loaders': [ 
      # loaders here 
     ], 
    }, 
}, 

]

Maintenant, vous pouvez utiliser les variables static_vars dans chaque modèle.

+0

Existe-t-il un moyen de relier ceci à l'admin? Il serait logique que l'administrateur du site puisse changer le titre du site par exemple (ou corriger une faute de frappe dans le sous-titre). – GuitarExtended

+0

Il est déjà "accroché". Cela fonctionnera dans l'admin aussi! –

+0

J'ai fait ce que vous avez proposé. Mais je ne peux pas voir (c'est-à-dire éditer) ces variables statiques dans l'admin. Dois-je les enregistrer dans admin.py d'une manière ou d'une autre? Désolé pour ces commentaires noob, je connais les processeurs de contexte. – GuitarExtended

1

Si vous souhaitez utiliser ces variables dans les modèles, vous devriez regarder context processors. La solution la plus simple est d'ajouter un context_processors.py à votre application ou votre projet, puis d'ajouter le chemin d'accès à ce fichier à la liste des processeurs de contexte dans vos paramètres