template safe length ifequal dirs bootstrap python django templates

python - safe - ¿Cómo verificar el indicador TEMPLATE_DEBUG en una plantilla django?



templates dirs django (6)

¿Sabes si es posible saber en una plantilla django si se establece el indicador TEMPLATE_DEBUG?

Me gustaría desactivar mi script de Google Analytics cuando estoy ejecutando mi aplicación django en mi máquina de desarrollo. Algo así como una etiqueta de plantilla {% if debug%} sería perfecto. Desafortunadamente, no encontré algo así en la documentación.

Por supuesto, puedo agregar esta bandera al contexto pero me gustaría saber si hay una mejor manera de hacerlo.


Deberá agregar el indicador DEBUG a su context_processors .

Puede que ni siquiera haya una forma alternativa. Al menos, ninguno que yo sepa.


Si aún no lo has hecho, siempre es útil ver si / cómo otros han tratado el mismo problema en djangosnippets. El fragmento más reciente que funciona con la etiqueta de análisis es 1656: http://www.djangosnippets.org/snippets/1656/

Lo bueno de esta solución es que le permite mantener su GOOGLE_ANALYTICS_CODE = xxxxxx en local_settings.py en caso de que el resto de su fuente sea público, su clave permanece privada. Además, da un paso adicional para no usar análisis para los usuarios que han iniciado sesión.

Incluye el Javascript para Google Analytics. No mostrará el código de Google Analytics cuando DEBUG esté activado o para los usuarios del personal.

Use {% googleanalyticsjs %} en sus plantillas.

Debes establecer algo como

GOOGLE_ANALYTICS_CODE = "UA-1234567-1"

en su archivo de configuración.

Asume que ''usuario'' en las variables de su plantilla es request.user , que será si usa:

return render_to_response(''template.html'',{ }, context_instance=RequestContext(request))

(Suponiendo que django.core.context_processors.auth está en TEMPLATE_CONTEXT_PROCESSORS , que es por defecto)

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)


Si la modificación de INTERNAL_IPS no es posible / adecuada, puede hacerlo con un procesador de contexto:

en myapp/context_processors.py :

from django.conf import settings def debug(context): return {''DEBUG'': settings.DEBUG}

en settings.py :

TEMPLATE_CONTEXT_PROCESSORS = ( ... ''myapp.context_processors.debug'', )

Luego en mis plantillas, simplemente:

{% if DEBUG %} .header { background:#f00; } {% endif %}


{% if debug %} puede hacer el truco, pero solo si pasa RequestContext lugar de Context . Además, la debug no es una marca booleana, es una función que cuando se evalúa mientras DEBUG = True devuelve cierta información de depuración. Esto puede ser una sobrecarga innecesaria para su plantilla.

Personalmente, hago este truco en su lugar.

{% if request.META.HTTP_HOST == "127.0.0.1:8000" %}

Esto siempre funcionará, pero en lugar de depender tanto de la bandera DEBUG como de INTERNAL_IP, solo funciona para la IP codificada.


Django 1.9 settings.py :

INTERNAL_IPS = ( ''127.0.0.1'', )

Plantillas:

{% if debug %}

https://docs.djangoproject.com/en/1.9/ref/settings/#std:setting-INTERNAL_IPS dice:

Una lista de direcciones IP, como cadenas, que:

  • Permita que el procesador de contexto de depuración () agregue algunas variables al contexto de la plantilla.

El procesador de contexto de debug está en la settings.py predeterminada settings.py .


Suponiendo que no haya configurado TEMPLATE_CONTEXT_PROCESSORS en algún otro valor en settings.py , Django cargará automáticamente el preprocesador de contexto de debug (como se indica here ). Esto significa que tendrá acceso a una variable llamada debug en sus plantillas si la settings.DEBUG es verdadera y la dirección IP de su máquina local (que simplemente puede ser 127.0.0.1) se establece en la settings.INTERNAL_IPS variables.INTERNAL_IPS (que se describe here ) . settings.INTERNAL_IPS es una tupla o lista de direcciones IP que Django debe reconocer como "internas".