Django Debug Toolbar的“切换上下文”区域有哪些不同的词组?

时间:2015-09-23 16:54:14

标签: django django-debug-toolbar

使用Django Debug Toolbar我可以转到“模板”面板,然后点击“切换上下文”链接,随时查看上下文。

每个都显示不止一个词典,例如:

{'False': False, 'None': None, 'True': True}
{'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10,
                            'ERROR': 40,
                            'INFO': 20,
                            'SUCCESS': 25,
                            'WARNING': 30},
 'csrf_token': <SimpleLazyObject: 'zJvE5t6k9KdxMfUmU4SOvRTOC2rh7Pvw'>,
 'debug': True,
 'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x10877b860>,
 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0x10877de10>,
 'request': '<<request>>',
 'sql_queries': <function debug.<locals>.<lambda> at 0x108d3de18>,
 'user': <SimpleLazyObject: <User: phil>>}
{'is_paginated': True,
 'object_list': '<<queryset of twitter.Tweet>>',
 'page_obj': <Page 1 of 330>,
 'paginator': <ditto.ditto.paginator.DiggPaginator object at 0x10877bac8>,
 'view': <ditto.twitter.views.TweetList object at 0x108782dd8>}

这里显示的三种不同的词汇是什么?为什么不呢?

1 个答案:

答案 0 :(得分:1)

Django模板有一些叫做范围的东西。每个范围都是一个变量层,仅在当前范围和所有子范围中可用。

每个&#39;层&#39;负责渲染模板的人将添加它自己的范围。默认情况下,有3个范围:根范围,它将具有一些常量变量的定义:

{'False': False, 'None': None, 'True': True}

context_processor范围,它将包含从上下文处理器全局注入模板的所有变量:

{'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10,
                            'ERROR': 40,
                            'INFO': 20,
                            'SUCCESS': 25,
                            'WARNING': 30},
 'csrf_token': <SimpleLazyObject: 'zJvE5t6k9KdxMfUmU4SOvRTOC2rh7Pvw'>,
 'debug': True,
 'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x10877b860>,
 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0x10877de10>,
 'request': '<<request>>',
 'sql_queries': <function debug.<locals>.<lambda> at 0x108d3de18>,
 'user': <SimpleLazyObject: <User: phil>>}

Response范围,将所有变量传递到Response对象:

{'is_paginated': True,
 'object_list': '<<queryset of twitter.Tweet>>',
 'page_obj': <Page 1 of 330>,
 'paginator': <ditto.ditto.paginator.DiggPaginator object at 0x10877bac8>,
 'view': <ditto.twitter.views.TweetList object at 0x108782dd8>}

按照从最旧的(根)到最年轻的顺序列出,这意味着:后面提到的dicts中提到的所有变量都将涵盖上面提到的变量。

某些模板标签可以创建其他范围,例如for循环,where,include ...这些范围在django调试工具栏中不可见。