Je voudrais avoir une variable commune disponible pour tous mes templates. Je travaille sur ce toute la matinée et la seule façon que je peux trouver de le faire est d'avoir middleware comme ceci:Avoir une variable globale disponible pour vos templates dans Django
class GetNameMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
def process_template_response(self, request, response):
response.context_data['name'] = 'dave'
return response
et ont une vue comme celui-ci:
from django.template.response import TemplateResponse
from django.shortcuts import render
def home(request):
return TemplateResponse(request, 'home.html', {})
et je peut y accéder dans le modèle
Hello {{ name }}
il semble un peu moche que je ne peux pas utiliser render
plus (je sais que je peux faire from django.template.response import TemplateResponse as render
mais ce n'est pas vraiment un solution)
(Django 1.10, python 3.5.2)
Pourriez-vous ajouter quelque chose au sujet de _why_ vous avez besoin de ça? Parce que je pense que c'est habituellement résolu différemment. – RemcoGerlich
Oui, bien sûr. Je souhaite afficher un message sur le site pour les personnes se trouvant en dehors du Royaume-Uni. Le message a besoin de données communes comme '{% if country_code! = 'UK'%} ... {% endif%}' – Sevenearths
Je suis d'accord avec [giorgosp] (http://stackoverflow.com/users/2924320/giorgosp) sur le [fournisseur de contexte personnalisé] (https://docs.djangoproject.com/fr/1.10/ref/templates/api/#writing-your-own-context-processors). Voici un [article de blog utile] (http://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/). Alors que ce post est daté, le contrat, si vous voulez, pour la fonctionnalité du fournisseur de contexte reste le même. –