Подтвердить что ты не робот

Как проверить флаг TEMPLATE_DEBUG в шаблоне django?

Знаете ли вы, можно ли узнать в шаблоне django, если установлен флаг TEMPLATE_DEBUG?

Я хочу отключить мою аналитику google script, когда я запускаю приложение django на своей машине разработки. Что-то вроде тега шаблона {% if debug%} будет идеальным. К сожалению, я не нашел в документации что-то подобное.

Конечно, я могу добавить этот флаг в контекст, но я хотел бы знать, есть ли лучший способ сделать это.

4b9b3361

Ответ 1

Предполагая, что вы не установили TEMPLATE_CONTEXT_PROCESSORS для некоторого другого значения в settings.py, Django автоматически загрузит препроцессор контекста debug (как отмечено здесь). Это означает, что у вас будет доступ к переменной с именем debug в ваших шаблонах, если settings.DEBUG истинно, а IP-адрес вашего локального компьютера (который может просто быть 127.0.0.1) установлен в переменной settings.INTERNAL_IPS (которая описана здесь). settings.INTERNAL_IPS - это кортеж или список IP-адресов, которые Django должен распознавать как "внутренние".

Ответ 2

Если модификация INTERNAL_IPS невозможна/подходит, вы можете сделать это с помощью процессора контекста:

в myapp/context_processors.py:

from django.conf import settings

def debug(context):
  return {'DEBUG': settings.DEBUG}

в settings.py:

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

Затем в моих шаблонах просто:

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

Ответ 3

Django 1.9 settings.py:

INTERNAL_IPS = (
    '127.0.0.1',
)

Шаблоны:

{% if debug %}

https://docs.djangoproject.com/en/1.9/ref/settings/#std:setting-INTERNAL_IPS говорит:

Список IP-адресов в виде строк, которые:

  • Разрешить обработчику контекста debug() добавлять некоторые переменные в контекст шаблона.

Контекстный процессор debug находится по умолчанию settings.py.

Ответ 4

Если вы еще этого не сделали, это всегда помогает увидеть, если/как другие имеют дело с одной и той же проблемой на djangosnippets. Самый последний фрагмент работы с тегом analytics - 1656: http://www.djangosnippets.org/snippets/1656/

Что приятно в этом решении, так это то, что он позволяет хранить ваш GOOGLE_ANALYTICS_CODE = xxxxxx в файле local_settings.py в том случае, если остальная часть вашего источника является общедоступной, а ваш ключ остается закрытым. Кроме того, это дополнительный шаг, чтобы не использовать аналитику для зарегистрированных пользователей.

Включает Javascript для Google Analytics. Не будет отображаться код Google Analytics, когда DEBUG включен или для пользователей.

Используйте {% googleanalyticsjs %} в ваших шаблонах.

Вы должны установить что-то вроде

GOOGLE_ANALYTICS_CODE = "UA-1234567-1"

в вашем файле настроек.

Предполагает "пользователь" в ваших переменных шаблона request.user, который будет, если вы используете:

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

(Предполагая, что django.core.context_processors.auth находится в TEMPLATE_CONTEXT_PROCESSORS, который по умолчанию)


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)

Ответ 5

{% if debug %} может сделать трюк, но только если вы передадите RequestContext вместо Context. Кроме того, debug не является логическим флагом, его функция, которая при оценке DEBUG = True возвращает некоторую отладочную информацию. Это может быть ненужным накладным для вашего шаблона.

Лично я делаю этот трюк.

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

Это всегда будет работать, но вместо того, чтобы полагаться на флаг DEBUG и INTERNAL_IP, он просто работает для жестко закодированного IP.

Ответ 6

Вам нужно добавить флаг DEBUG к context_processors.

Не может быть альтернативного способа. По крайней мере, я ничего не знаю.