如何在Django模板中检查TEMPLATE_DEBUG标志?

73 投票
6 回答
33729 浏览
提问于 2025-04-15 13:34

你知道在Django模板中是否可以判断TEMPLATE_DEBUG这个标志是否被设置吗?

我想在我的Django应用在开发机器上运行时,禁用我的谷歌分析脚本。类似于{% if debug %}这样的模板标签就太完美了。不过,我在文档中没有找到类似的东西。

当然,我可以把这个标志添加到上下文中,但我想知道有没有更好的方法来做到这一点。

6 个回答

30

Django 1.9+

在settings.py文件中:

INTERNAL_IPS = (
    '127.0.0.1',
)

模板设置:

{% if debug %}

https://docs.djangoproject.com/en/dev/ref/settings/#internal-ips 上说:

这是一个包含IP地址的列表,格式是字符串,这些IP地址可以:

  • 让debug()这个上下文处理器向模板中添加一些变量。

debug这个上下文处理器是默认在settings.py文件里的。

59

如果修改 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 %}
80

假设你没有在 settings.py 文件中把 TEMPLATE_CONTEXT_PROCESSORS 设置成其他值,Django 会自动加载一个叫 debug 的上下文处理器(具体可以参考 这里)。这意味着,如果 settings.DEBUG 是真的,并且你的本地机器的IP地址(通常是 127.0.0.1)被设置在 settings.INTERNAL_IPS 这个变量里(详细说明可以看 这里),那么你在模板中就能访问到一个叫 debug 的变量。settings.INTERNAL_IPS 是一个包含Django应该识别为“内部”的IP地址的元组或列表。

撰写回答