2010-01-22 104 views
3

当我在Django模板{{placeholder}}中发生错误时,我没有收到任何错误,只是输出中我期待内容的空白处。有没有办法在发生这种情况时在日志中查看某些内容,最好使用logging.warninglogging.errorDjango:记录模板错误

回答

2

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

+0

Ignacio,新版本的Django,仍然是唯一的出路吗?谢谢 – glarrain 2012-05-04 14:51:18

+2

'django.template'记录器在Django 1.9中被导入https://docs.djangoproject.com/ja/1.9/topics/logging/#django-template – roboslone 2016-07-20 08:32:23

0

在Django> = 1.8中,TEMPLATE_STRING_IF_INVALID已弃用string_if_invalidsettings.TEMPLATES中。

如果你想要做的多一点,取决于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' 

并在settings.TEMPLATES中设置string_if_invalid

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

是的,有。只需添加在您的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的第二个片段非常相似。