2010-01-22 102 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的第二個片段非常相似。