Bu Jinja2 özel uzantısının çalışmasını sağlamak için uğraştım - doktorlar "siviller" için yazmadıklarını söylerken şaka yapmıyorlardı - ve sonunda bu çalışma koduna ulaşmayı başardılar :Özel Jinja2 Uzantısı ile Yardım
class WrapperExtension(Extension):
tags = set(['wrap'])
def parse(self, parser):
lineno = parser.stream.next().lineno
args = [parser.parse_expression()]
args.append(nodes.Const(args[0].name))
return nodes.CallBlock(
self.call_method('_render', args),
[], [], []).set_lineno(lineno)
def _render(self, value, name, *args, **kwargs):
if some_condition():
return '<wrapper id="%s">%s</wrapper>' % (name, value)
return value
Dediğim gibi, bu şimdi çalışıyor. Emin olmadığımdan dolayı, self.call_method()
(nodes.Call
nesnesini döndürür) yerine, nodes.CallBlock
(parse()
) döndürmem gerekiyor. Herhangi bir içgörü varsa veya bana yazım uzantıları ile ilgili bir öğretici yazabilirseniz lütfen bana bildirin.
Bir süre önce bir Jinaj2 uzantısı yazdım ... ve zaten her şeyi unuttum :) – zeekay