Django:记录模板错误

时间:2010-01-22 04:11:28

标签: django logging

当我在django模板{{placeholder}}中出错时,我没有得到任何错误,只是输出中我想要内容的空白区域。有没有办法在发生这种情况时查看我的日志中的内容,最好使用logging.warninglogging.error

3 个答案:

答案 0 :(得分:5)

是的,有。只需添加您的开发settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.template': {
            'handlers': ['console'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
        },
    },
}

作为roboslone stated,Django 1.9确实引入了它。该代码段与Configuring logging examples in Django docs的第二个代码非常相似。

答案 1 :(得分:2)

Django为TEMPLATE_STRING_IF_INVALID中处理未知上下文变量提供的唯一功能。如果你想要更好的话,你将不得不对模板引擎进行更深入的黑客攻击。

答案 2 :(得分:0)

在Django> = 1.8中,TEMPLATE_STRING_IF_INVALID已被弃用,转而使用settings.TEMPLATES中的string_if_invalid

如果你想做的不仅仅是依赖来自DEBUG记录器的django.template消息,你可以在django.template.base.FilterExpression.render()中欺骗以下代码:

if '%s' in string_if_invalid:
    return string_if_invalid % self.var

使用以下类:

class InvalidString(object):
    def __mod__(self, other):
        log.error('Missing template variable: "%s"', other)
        # ... do other interesting things ... 
        return u''

    def __contains__(self, item):
        return item == '%s'

并在string_if_invalid中设置settings.TEMPLATES

TEMPLATES = [{
    'OPTIONS': {'string_if_invalid': InvalidString()}
    # ...
}]