[PYTHON] Comment définir des variables pouvant être utilisées dans toute l'application Django ~ Utile pour les modèles, etc. ~

Lors de la création d'une application avec Django, il est souvent utile d'avoir des constantes (variables) utilisables sur tout le site.

Par exemple, le texte à afficher sur tout le site, tel que le nom et la version de l'application.

Django utilise le processeur de contexte pour récupérer les constantes définies. Bien entendu, plusieurs réglages sont possibles.

environnement

doux version
Nginx 1.16.1
uWSGI 2.0.18
Python 3.8.2
Django 3.0.5

C'est la manière de le faire dans Django 3.0.x.

Les variables gérées par Template sont généralement passées par vue, mais ...

Le modèle obtient et affiche des variables telles que «{{variable}}», qui sont généralement transmises via la vue. Cette méthode est inefficace car il est nécessaire de décrire le processus de transmission des variables pour chaque application.

Méthode de référence normale

test/view.py


def viewFunc(request):
  template_name = "template.html"
  context = {"variable" : "hello world!"}
  return render(request,template_name,context)

Créez une fonction d'affichage dans la vue de votre application et transmettez la valeur en tant que contexte.

template.html


<p>{{Nom de variable}}</p>

Il sera affiché dans le modèle de cette manière.

Définition des constantes pouvant être utilisées dans toute l'application

En créant un processeur de contexte, vous pouvez transmettre des valeurs / objets dans toute l'application.

app/settings.py


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                …
                'mlapp.context_processors.constant_text',, #Ajoute ça
            ],
        },
    },
]

La fonction appelée constant_text que nous ajouterons obtiendra la valeur du modèle.

app/context_processors.py


def constant_text(request):
    return {
        'APP_NAME': 'TEST APP',
    }

ʻAPP_NAMEest ajouté à la place dereturn. Créez context_processors.py dans le même répertoire que settings.py`.

template.html


<p>{{ APP_NAME }}</p>

Vous pouvez maintenant obtenir les variables de l'ensemble de l'application et les afficher dans le modèle. C'est tout, donc c'est facile.

Si vous souhaitez définir une valeur dans settings.py

settings.py


APP_DESCRIPTION='This is a test app.'

Créez une variable dans settings.py et attribuez la valeur.

app/context_processors.py


from django.conf import settings

def constant_text(request):
    return {
        'APP_NAME': 'TEST APP',
        'APP_DESCRIPTION': settings.APP_DESCRIPTION,
    }

Lisez la valeur de settings.py.

template.html


<h1>{{ APP_NAME }}</h2>
<p>{{ APP_DESCRIPTION }}</p>

En faisant cela, vous pouvez également gérer la valeur de settings.py.

C'est très facile.

Recommended Posts

Comment définir des variables pouvant être utilisées dans toute l'application Django ~ Utile pour les modèles, etc. ~
Comment filtrer les clés externes qui peuvent être sélectionnées sur l'écran d'administration de Django
À propos du fait que l'objet recompilé peut être utilisé pour le modèle re.match
Fonctions pouvant être utilisées dans l'instruction for
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
[Petite histoire] Comment installer le module lorsque pip ne peut pas être utilisé en raison d'un proxy, etc.
Comment configurer un serveur SMTP simple qui peut être testé localement en Python
[Pour les débutants] Comment utiliser l'instruction for sous Linux (variables, etc.)
Goroutine (contrôle parallèle) utilisable sur le terrain
[Django] Noms de champs pouvant être utilisés pour le modèle utilisateur, l'enregistrement des utilisateurs et les méthodes de connexion
Comment résoudre le problème que le contenu vidéo ne peut pas être lu sur Firefox pour Linux
Goroutine utilisable sur le terrain (édition errgroup.Group)
[Apprentissage de Django avec la lame du diable] Comment obtenir un ensemble de requêtes pour une référence avant / arrière
[Flask] J'ai essayé de résumer la "configuration docker-compose" qui peut être créée rapidement pour les applications Web
J'ai essayé de l'étendre pour que la base de données puisse être utilisée avec le logiciel d'analyse de Wiire
Comprendre les probabilités et les statistiques qui peuvent être utilisées pour la gestion des progrès avec un programme python
Comment définir la résolution de sortie pour chaque image clé dans Blender
Module standard Python utilisable en ligne de commande
Les filtres Kalman peuvent-ils être utilisés pour prédire les tendances boursières?
Solution au problème que Ctrl + z ne peut pas être utilisé dans Powershell dans l'environnement Docker pour Windows (provisoire)
J'ai créé un modèle de projet Python générique
Masquer l'avertissement selon lequel zsh peut être utilisé par défaut sur Mac
Comment créer un bot Janken qui peut être facilement déplacé (commentaire)
[Django] Comment passer des valeurs directement des balises de modèle aux variables JavaScript
Il semble que l'annulation de toutes les commandes enfants puisse être utilisée pour annuler toutes les commandes parentes (commandes spéciales) avec l'API bitflyer
Comment vérifier la version de Django
Comment régler l'heure du serveur sur l'heure japonaise
Contrôle QPS utilisable sur le terrain (Rate Limit) Limite l'exécution à n fois par seconde
[Python3] Code qui peut être utilisé lorsque vous souhaitez modifier l'extension d'une image à la fois
Notes pour créer des figures pouvant être publiées dans des revues avec matplotlib
J'ai essayé de résumer les opérations susceptibles d'être utilisées avec numpy-stl
J'ai essayé de créer OneHotEncoder, qui est souvent utilisé pour l'analyse des données, afin qu'il puisse atteindre l'endroit qui démange.
Bibliothèques à inclure lors de la création d'API dans l'environnement Django Rest Frakework, extensions vscode, etc. (pour les débutants)
Comment utiliser MkDocs pour la première fois
Types de fichiers pouvant être utilisés avec Go
Comment imprimer des messages de débogage sur la console Django
Comment définir l'affinité du processeur pour les threads de processus
Le problème que la commande ifconfig ne peut pas être utilisée
Présentation et fonctionnalités utiles de scikit-learn qui peuvent également être utilisées pour l'apprentissage en profondeur
[Jinja2] Solution au problème que les variables ajoutées dans l'instruction for ne sont pas héritées
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
J'essaierai de résumer les liens qui me semblent utiles pour le moment
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
Comment créer une propriété de relations qui peuvent être prefetch_related par des conditions spécifiques
Serveur de partage de fichiers réalisé avec Raspberry Pi pouvant être utilisé pour le travail à distance
Comment définir l'environnement de développement pour chaque projet avec VSCode + extension Python + Miniconda
Comment extraire les conditions (acquérir tous les éléments du Groupe qui remplissent les conditions) pour Groupe par Groupe
Statistiques simples qui peuvent être utilisées pour analyser l'effet des mesures sur les sites EC et les codes qui peuvent être utilisés dans le notebook jupyter
J'ai créé un outil pour générer automatiquement un diagramme de transition d'état pouvant être utilisé à la fois pour le développement Web et le développement d'applications
[Nouvel employé étudiant] Récapitulons les commandes Linux susceptibles d'être désormais utilisées pour la construction du réseau