すべてのタグからノードが作成されます。 how to write custom tagsを読んで、その仕組みを知ることができます。タグの中にあるものはすべてその子になります。ここではDjangoのドキュメントからのコメントタグの例は次のとおりです。
def do_comment(parser, token):
nodelist = parser.parse(('endcomment',))
parser.delete_first_token()
return CommentNode()
あなたはコメントタグは「endcomment」まですべてを解析し、それを捨てるだろう見るように。他のタグはnodelist
からSometagNode()
に渡され、レンダリングに使用されます。
再帰的にレンダリングされます。レンダリング()がノード上で呼び出されると、レンダリングはその子にレンダリングされます。
解析では、ネストされたタグを取得することができますし、それがタグにパースとつまずくないとき、それは順番に呼び出します。これは、do_tag()
事を呼び出すためparser.parse()
は、タグを閉じて、適切なマッチングを見つけるために管理します、なぜこれがあるだけでなく再帰的に行われていますparser.parse()
はもう一度最も近い終了タグを見つけ、すべてをノードにラップしてノードを返します。上位のparser.parse()はそれをノードリストに置き、終了タグを検索し続けます。
ノードのコンテキストオブジェクトは、dicts構造のリストの一種です。余分なコンテキストは既存のコンテキストの上にプッシュされ、子ノードに渡され、ノードがレンダリングされた後にポップアウトされるため、上位スコープに影響しません。
子を持たないタグの場合、parser.parse()
は使用されないため、ノードインスタンスは子なしで返されます。
出典
2014-10-09 12:18:18
Ski
私は 'django.template.base'を読み始めましたが、強力な時間撓曲魔法(goto 5amのように)を感じるとすぐに出ました。私はupvoteし、代わりに朝のチェック:) –
私は私のtodoリストに入れました! –