TEMPLATE_DEBUGフラグが設定されている場合、Djangoテンプレートで知ることができるかどうか知っていますか?
開発マシンでDjangoアプリを実行しているときにGoogleアナリティクススクリプトを無効にしたいと思います。{%if debug%}テンプレートタグのようなものは完璧でしょう。残念ながら、私はしませんでしたドキュメントでそのようなものを見つけます。
確かに、このフラグをコンテキストに追加できますが、それを行うより良い方法があるかどうか知りたいです。
TEMPLATE_CONTEXT_PROCESSORS
をsettings.py
の他の値に設定していないと仮定すると、Djangoは自動的にdebug
コンテキストプリプロセッサーをロードします( here )。これは、テンプレートのdebug
という変数にアクセスできることを意味しますifsettings.DEBUG
がtrueandローカルマシンのIPアドレス(単純に127.0.0.1になります)は、変数settings.INTERNAL_IPS
( here で説明)に設定されます。 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 %}
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
。
まだ行っていない場合は、他の人がdjangosnippetsで同じ問題に対処したかどうか/どのように対処したかを常に確認するのに役立ちます。分析タグで動作する最新のスニペットは1656です。 http://www.djangosnippets.org/snippets/1656/
このソリューションの優れている点は、GOOGLE_ANALYTICS_CODE = xxxxxx
local_settings.pyで、ソースの残りがパブリックの場合、キーはプライベートのままです。さらに、ログインしているユーザーに分析を使用しないようにするには、追加の手順を実行します。
Google AnalyticsのJavascriptが含まれています。 DEBUGがオンになっている場合、またはユーザーにスタッフがいる場合、Googleアナリティクスコードは表示されません。
使用する
{% 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
に追加する必要があります。
別の方法さえないかもしれません。少なくとも、私が知っていることはありません。