1

Django デバッグ ツールバーを使用して、[テンプレート] パネルに移動し、[コンテキストの切り替え] リンクをクリックして、いつでもコンテキストを表示できます。

これらのそれぞれは、複数の辞書を示しています。

{'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>}

ここに示されている 3 つの異なる dict は何ですか? なぜ一つではないのですか?

4

1 に答える 1

2

Django テンプレートにはスコープと呼ばれるものがあります。各スコープは変数のレイヤーであり、現在のスコープとすべての子スコープでのみ使用できます。

テンプレートのレンダリングを担当する「レイヤー」のそれぞれは、独自のスコープを追加します。デフォルトでは、次の 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 loop、where、include などのいくつかのテンプレート タグによって作成できます。そのスコープは、django デバッグ ツールバーには表示されません。

于 2015-09-23T18:14:43.257 に答える