Django 调试工具栏的 'Toggle context' 区域中有哪些不同的指令?
What are the different dicts in Django Debug Toolbar's 'Toggle context' areas?
使用 Django Debug Toolbar 我可以转到 'Templates' 面板并单击 'Toggle context' 链接随时查看上下文。
其中每一个都显示不止一个字典,例如:
{'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>}
这里显示的三个不同的字典是什么?为什么不是一个?
Django 模板有一个叫做作用域的东西。每个作用域都是一层变量,仅在当前作用域和所有子作用域中可用。
负责呈现模板的每个 'layers' 都将添加自己的范围。默认情况下有 3 个作用域:根作用域,其中包含常量变量的一些定义:
{'False': False, 'None': None, 'True': True}
context_processor
s 范围,它将包含从上下文处理器全局注入模板的所有变量:
{'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 loop、where、include...这些作用域在 django 调试工具栏中是不可见的。
使用 Django Debug Toolbar 我可以转到 'Templates' 面板并单击 'Toggle context' 链接随时查看上下文。
其中每一个都显示不止一个字典,例如:
{'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>}
这里显示的三个不同的字典是什么?为什么不是一个?
Django 模板有一个叫做作用域的东西。每个作用域都是一层变量,仅在当前作用域和所有子作用域中可用。
负责呈现模板的每个 'layers' 都将添加自己的范围。默认情况下有 3 个作用域:根作用域,其中包含常量变量的一些定义:
{'False': False, 'None': None, 'True': True}
context_processor
s 范围,它将包含从上下文处理器全局注入模板的所有变量:
{'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 loop、where、include...这些作用域在 django 调试工具栏中是不可见的。