【问题标题】:Django: logging template errorsDjango:记录模板错误
【发布时间】:2011-01-08 01:32:12
【问题描述】:

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

【问题讨论】:

    标签: django logging django-templates django-logging


    【解决方案1】:

    是的,有。只需添加您的开发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 确实引入了它。 sn-p 与Configuring logging examples in Django docs 的第二个非常相似。

    【讨论】:

      【解决方案2】:

      Django 为处理TEMPLATE_STRING_IF_INVALID 中的未知上下文变量提供了唯一的功能。如果您想要比这更好,您将不得不对模板引擎进行更深入的修改。

      【讨论】:

      【解决方案3】:

      在 Django >= 1.8 中,TEMPLATE_STRING_IF_INVALID 已被弃用,取而代之的是 settings.TEMPLATES 中的 string_if_invalid

      如果你想要做的不仅仅是依赖来自django.template 记录器的DEBUG 消息,你可以欺骗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()}
          # ...
      }]
      

      【讨论】:

        猜你喜欢
        • 2019-04-11
        • 2011-11-08
        • 2011-08-28
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        相关资源
        最近更新 更多