ProgramingTip

Django 템플릿에서 TEMPLATE_DEBUG 플래그를 확인하는 방법은 무엇입니까?

bestdevel 2020. 12. 10. 20:56
반응형

Django 템플릿에서 TEMPLATE_DEBUG 플래그를 확인하는 방법은 무엇입니까?


TEMPLATE_DEBUG 플래그가 설정된 경우 django 템플릿에서 알 수 있는지 알고 있습니까?

내 컴퓨터에서 django 앱을 개발할 때 Google Analytics를 사용하고 싶습니다. {% if debug %} 템플릿 태그와 같은 것이 완벽합니다. 불행히도 문서에서 그런 것을 찾을 수 없습니다.

확실히이 플래그를 더 나은 방법이 있는지 알고 싶습니다.


TEMPLATE_CONTEXT_PROCESSORS다른 값으로에서 설정하지 않았다고 가정하면 settings.py장고는 debug컨텍스트 전처리기를 자동으로로드합니다 ( 여기에 언급 됨 ). 이라는 변수에 당신 액세스 할 수있을 것이라는 점을이 수단 debug템플릿에를 하는 경우 settings.DEBUG 사실 로컬 컴퓨터의 IP 주소가 (단순히 127.0.0.1을 할 수있는) 변수에서 설정 settings.INTERNAL_IPS(되어있는 설명 여기 ). settings.INTERNAL_IPSDjango가 "내부"로 인식해야하는 튜플 또는 IP 주소 목록입니다.


수정 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 %}

장고 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.


아직하지 않았다면 다른 사람들이 djangosnippets에서 동일한 문제를 처리했는지 / 어떻게 처리했는지 확인하는 것이 항상 도움이됩니다. 애널리틱스 태그로 작업하는 최신 스 니펫은 1656입니다. http://www.djangosnippets.org/snippets/1656/

이 솔루션의 좋은 점은 GOOGLE_ANALYTICS_CODE = xxxxxx나머지 소스가 공개되고 비공개로 유지되는 경우 local_settings.py에 있을 수있는 것 입니다. 또한 로그인 한 사용자에 대해 분석을 사용하지 않는 추가 단계로 이동합니다.

Google Analytics 용 자바 펼쳐를 포함합니다. DEBUG가 직원 사용자에게 Google Analytics 코드를 표시하지 않습니다.

{% 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)

{% if debug %}이 통과하는 당신 경우에만 트릭을 할 수 있지만 RequestContext대신 Context. 또한 부울 debug플래그가 사용 평가할 때 일부 부채 DEBUG = True정보 반환 하는 함수입니다 . 이것은 템플릿에 불필요한 오버 헤드가 될 수 있습니다.

개인적으로 대신이 트릭을합니다.

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

이것은 항상 작동하지만 DEBUG 플래그와 INTERNAL_IP에 의존하는 대신 하드 코딩 된 IP에서만 작동합니다.


DEBUG플래그를 추가해야 합니다 context_processors.

대안이 없을 수도 있습니다. 적어도 내가 아는 것은 없습니다.

참고 URL : https://stackoverflow.com/questions/1271631/how-to-check-the-template-debug-flag-in-a-django-template

반응형