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_IPS
Django가 "내부"로 인식해야하는 튜플 또는 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
.
대안이 없을 수도 있습니다. 적어도 내가 아는 것은 없습니다.
'ProgramingTip' 카테고리의 다른 글
Linter pylint는 설치되지 않습니다. (0) | 2020.12.10 |
---|---|
OS 독립 경로 'META-INF / proguard / androidx-annotations.pro'가있는 파일이 두 개 이상 발견되었습니다. (0) | 2020.12.10 |
MySQL의 날짜를 이동 필드에서 변환 (0) | 2020.12.10 |
정규식을 사용하여 후행 공백을 제거합니까? (0) | 2020.12.10 |
전체 파일에서 열을 선택해야합니까? (0) | 2020.12.10 |