Savez-vous s'il est possible de savoir dans un modèle Django si l'indicateur TEMPLATE_DEBUG est défini?
Je souhaite désactiver mon script Google Analytics lorsque j'exécute mon application Django sur ma machine de développement. Quelque chose comme une balise de modèle {% if debug%} serait parfait. Malheureusement, je n'ai pas trouvé quelque chose comme ça dans la documentation.
Bien sûr, je peux ajouter cet indicateur au contexte, mais j'aimerais savoir s'il existe une meilleure façon de le faire.
En supposant que vous n’ayez pas défini TEMPLATE_CONTEXT_PROCESSORS
avec une autre valeur dans settings.py
, Django chargera automatiquement le préprocesseur de contexte debug
(comme indiqué ici ). Cela signifie que vous aurez accès à une variable appelée debug
dans vos modèles sisettings.DEBUG
est vrai et l'adresse IP de votre ordinateur local (qui peut simplement être 127.0.0.1) est définie dans la variable settings.INTERNAL_IPS
(qui est décrit ici ). settings.INTERNAL_IPS
est un tuple ou une liste d'adresses IP que Django devrait reconnaître comme "internes".
Si modifier INTERNAL_IPS
n'est pas possible/approprié, vous pouvez le faire avec un processeur de contexte:
dans myapp/context_processors.py
:
from Django.conf import settings
def debug(context):
return {'DEBUG': settings.DEBUG}
dans settings.py
:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myapp.context_processors.debug',
)
Puis dans mes modèles, simplement:
{% if DEBUG %} .header { background:#f00; } {% endif %}
Django 1.9
settings.py:
INTERNAL_IPS = (
'127.0.0.1',
)
Modèles:
{% if debug %}
https://docs.djangoproject.com/fr/1.9/ref/settings/#std:setting-INTERNAL_IPS dit:
Une liste d'adresses IP, sous forme de chaînes, qui:
- Autorisez le processeur de contexte debug () à ajouter des variables au contexte du modèle.
Le processeur de contexte debug
est dans le settings.py
par défaut.
Si vous ne l'avez pas déjà fait, il est toujours utile de voir si/comment d'autres ont traité le même problème sur djangosnippets. L’extrait le plus récent utilisant la balise analytique est 1656: http://www.djangosnippets.org/snippets/1656/
Ce qui est bien avec cette solution, c’est qu’elle vous permet de conserver votre GOOGLE_ANALYTICS_CODE = xxxxxx
dans local_settings.py si le reste de votre source est public, votre clé reste privée. De plus, éviter les analyses pour les utilisateurs connectés est une étape supplémentaire.
Inclut le Javascript pour Google Analytics. N'affichera pas le code Google Analytics lorsque DEBUG est activé ou aux utilisateurs du personnel.
Utilisez
{% googleanalyticsjs %}
dans vos modèles.Vous devez définir quelque chose comme
GOOGLE_ANALYTICS_CODE = "UA-1234567-1"
dans votre fichier de paramètres.
Supposons que 'utilisateur' dans vos variables de modèle est
request.user
, ce qui sera le cas si vous utilisez:return render_to_response('template.html',{ }, context_instance=RequestContext(request))
(En supposant que
Django.core.context_processors.auth
est dansTEMPLATE_CONTEXT_PROCESSORS
, ce qui est par défaut)from Django import template import settings register = template.Library() class ShowGoogleAnalyticsJS(template.Node): def render(self, context): code = getattr(settings, "GOOGLE_ANALYTICS_CODE", False) if not code: return "<!-- Goggle Analytics not included because you haven't set the settings.GOOGLE_ANALYTICS_CODE variable! -->" if 'user' in context and context['user'] and context['user'].is_staff: return "<!-- Goggle Analytics not included because you are a staff user! -->" if settings.DEBUG: return "<!-- Goggle Analytics not included because you are in Debug mode! -->" return """ <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> try { var pageTracker = _gat._getTracker('""" + str(code) + """'); pageTracker._trackPageview(); } catch(err) {}</script> """ def googleanalyticsjs(parser, token): return ShowGoogleAnalyticsJS() show_common_data = register.tag(googleanalyticsjs)
{% if debug %}
peut faire l'affaire mais seulement si vous passez RequestContext
au lieu de Context
. De plus, debug
n'est pas un indicateur booléen, c'est une fonction qui, lorsqu'elle est évaluée pendant que DEBUG = True
renvoie des informations de débogage. Cela peut être inutile pour votre modèle.
Personnellement, je fais ce truc à la place.
{% if request.META.HTTP_Host == "127.0.0.1:8000" %}
Cela fonctionnera toujours, mais au lieu de s’appuyer à la fois sur l’indicateur DEBUG et sur INTERNAL_IP, cela fonctionne uniquement pour l’IP codée en dur.
Vous devrez ajouter le drapeau DEBUG
à votre context_processors
.
Il n’ya peut-être même pas d’autre solution. Du moins, à ma connaissance.