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é.
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.
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.
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 à
],
},
},
]
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>
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