Se crea un nodo de cada etiqueta. Puede hacerse una idea de cómo funciona leyendo how to write custom tags. Todo lo que está dentro de la etiqueta será sus hijos. Este es un ejemplo de una etiqueta de comentario de django docs:
def do_comment(parser, token):
nodelist = parser.parse(('endcomment',))
parser.delete_first_token()
return CommentNode()
como se ve etiqueta de comentario analizará todo hasta el "endcomment" y va a tirar a la basura. Otras etiquetas pasarían nodelist
a SometagNode()
y las usarán para renderizar.
La representación se realiza de forma recursiva. Cuando se llama a un render() en el nodo, ejecuta el procesamiento en sus elementos secundarios, etc.
de análisis se realiza de forma recursiva, así es por esto que se puede obtener etiquetas anidadas y parser.parse()
se las arreglan para encontrar la correcta adecuación etiqueta de cierre, ya que cuando se hace el análisis y se tropieza en una etiqueta que llama do_tag()
cosa, que a su vez llamar la parser.parse()
otra vez para encontrar la etiqueta de cierre más cercana y se envolver todo en un nodo, devolver un nodo, el mayor parser.parse() se puso en una lista de nodos y continuará a buscar la etiqueta de cierre.
objeto Contexto en nodos es una especie de lista de estructura dicts. Se presiona el contexto adicional sobre el contexto existente y se pasa a los nodos hijos y se muestra después de que se represente el nodo para que no afecte al alcance superior.
Para las etiquetas que no tienen hijos la parser.parse()
no se utiliza, y así instancia nodo es devuelto sin hijos.
empecé a leer 'django.template.base' pero salieron tan pronto como me sentí poderosa, mágica momento de flexión (05 a.m. como Goto). Por el contrario votaré y verifico en la mañana :) –
¡Lo puse en mi lista de tareas pendientes! –