[PYTHON] Gérer les constantes dans les modèles Django

introduction

Lorsque vous souhaitez gérer des valeurs constantes fondamentalement fixes telles que le nom de domaine et le nom du site dans le modèle Django, utilisez la fonction appelée Processeur de contexte et ne passez pas la constante du côté vue à chaque fois, tout comme une constante depuis le modèle. Peut être manipulé.

environnement

Qu'est-ce que le processeur de contexte?

Le processeur de contexte est une fonction qui peut décrire le processus d'ajout de variables lors du passage d'un objet de contexte d'une vue à un modèle. Csrf_token etc. utilisés dans le modèle sont implémentés par ce mécanisme.

Création d'un processeur de contexte

Le processeur de contexte est défini comme une fonction qui prend un objet HTTP Request comme argument et renvoie un objet de type dictionnaire.

Créez la fonction avec n'importe quel nom et créez le fichier sous le répertoire de l'application.

hogeapp/context_processors.py


def my_context_processor(req):
    return {
        'domain_name': 'https://hogehoge.com',
        'site_name': 'Hogehoge Site',
    }

Dans l'exemple ci-dessus, l'objet dictionnaire est simplement renvoyé, mais le processus peut être décrit de la même manière qu'une fonction normale. Vous pouvez également l'utiliser pour faire référence à une constante définie séparément dans un fichier externe ou pour modifier la valeur d'une variable d'environnement en fonction de l'environnement.

paramètres config.py

Pour utiliser le processeur de contexte créé, vous devez le définir dans config.py. Ajoutez la fonction créée dans la section précédente à context_processors dans OPTIONS de TEMPLATES définis dans config.py.

config.py


TEMPLATES = [
    {
        'OPTIONS': {
            'context_processors': [
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'hogeapp.context_processors.my_context_processor', #ajouter à
            ],
        },
    },
]

Comment appeler depuis un modèle

Les variables ajoutées par le processeur de contexte peuvent être utilisées à partir du modèle de la même manière que les variables de contexte normales.

template.html


<link rel="icon" href="{{ domain_name }}/favicon.ico">
<title>{{ site_name }}</title>

référence

The Django template language: for Python programmers |Documentation Django| Django https://docs.djangoproject.com/ja/2.2/ref/templates/api/#writing-your-own-context-processors

Recommended Posts

Gérer les constantes dans les modèles Django
PHP comme var_dump dans le template Django
Modèle dans Django
Formulaire à Django
Conception de schémas d'URL et création de modèles dans Django
Gérer les signaux en langage C
Modifications du modèle dans Django
Gérer le démarquage avec python
Gérer les données ambiantes en Python
Implémenter la fonction de suivi dans Django
Renommer les colonnes de table dans Django3
Gérer les variables d'environnement en Python
Sortie de la structure de table dans Django
(Note) Django dans l'environnement Vagrant
Afficher Django ManyToManyField dans un modèle
Gérer les nombres complexes en Python
[Django] Comment lire les variables / constantes définies dans un fichier externe
recharger dans le shell django avec ipython
Comment gérer une session dans SQLAlchemy
Définir des espaces réservés dans les champs de saisie dans Django
8 commandes fréquemment utilisées dans Python Django
Ajouter dynamiquement des champs de formulaire dans Django
Erreur liée à memcached dans django
Gérer les fichiers csv avec Django (django-import-export)
Implémentation de la fonction de connexion dans Django
Enregistrer l'application Django dans le projet
Gérer les dates dans les commandes bash Linux
Gérer les files d'attente de messages posix en python
Gérez les données au format NetCDF avec Python
Gérez le format GDS II avec Python
Gérer les demandes dans un processus distinct
Ecrire des contraintes de clé externe dans Django
Comment refléter CSS dans Django
Changer la langue affichée dans Django 1.9
Déployez Django en 3 minutes à l'aide de docker-compose
Épingler la valeur de départ factory_boy dans Django
API GraphQL utilisant graphene_django dans Django
Implémentation du bouton like dans Django + Ajax
Comment gérer le japonais avec Python
Récupérer la chaîne de requête (chaîne de requête) avec Django
Créer un bot LINE avec Django