Vous utilisez un CallBlock
, ce qui indique que vous souhaitez que votre extension fasse office de bloc. Par exemple.
{% mytest arg1 arg2 %}
stuff
in
here
{% endmytest %}
nodes.CallBlock
vous attend à ce que passer une liste des noeuds représentant le corps (les états internes) pour votre poste. Actuellement c'est où vous passez None
- d'où votre erreur. Une fois que vous avez analysé vos arguments, vous devez procéder à l'analyse du corps du bloc. Heureusement, c'est facile. Vous pouvez simplement faire:
body = parser.parse_statements(['name:endmytest'], drop_needle=True)
puis de retourner un nouveau nœud. Le CallBlock
reçoit une méthode à appeler (dans ce cas _mytestfunc
) qui fournit la logique de votre extension.
body = parser.parse_statements(['name:endmytest'], drop_needle=True)
return nodes.CallBlock(self.call_method('_mytestfunc', args),[], [], body).set_lineno(lineno)
Sinon, si vous ne voulez pas que votre extension soit une balise de bloc, par exemple
{% mytest arg1 arg2 %}
vous ne devriez pas utiliser nodes.CallBlock
, vous devez simplement utiliser nodes.Call
à la place, qui ne prend pas un paramètre de corps. Il suffit donc de faire:
return self.call_method('_mytestfunc', args)
self.call_method
est simplement une fonction d'emballage pratique qui crée un nœud d'appel pour vous. J'ai passé quelques jours à écrire des extensions Jinja2 et c'est compliqué. Il n'y a pas beaucoup de documentation (autre que le code). Le projet GitHub cercueil a quelques exemples d'extensions here.
ou définir le corps à [] ... http://stackoverflow.com/questions/5972458/help-with-custom-jinja2-extension ... anyhoo, cette question n'est plus ... mais au moins votre lien est très utile – StefanNch