当我在django模板{{placeholder}}
中出错时,我没有得到任何错误,只是输出中我想要内容的空白区域。有没有办法在发生这种情况时查看我的日志中的内容,最好使用logging.warning
或logging.error
?
答案 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()}
# ...
}]