Мне нужно создать новый тег для Jinja2.Этот тег будет обтекать блок шаблона и добавлять новые символы для внутренних элементов.Например:
<ul>
{% wrapper %}
<li>Word1</li>
<li>Word2</li>
{% endwrapper %}
</ul>
После рендеринга мне нужно это увидеть:
<ul>
<a href="http://goo.gl"><li>Word1</li></a>
<a href="http://goo.gl"><li>Word2</li></a>
</ul>
Как я могу видеть документы - мне нужно создать новый класс, которыйбудет делать то, что я хочу.Я написал это:
class WrapperTagExtension(Extension):
tags = set(['wrapper'])
def __init__(self, environment):
super(WrapperTagExtension, self).__init__(environment)
def parse(self, parser):
lineno = next(parser.stream).lineno
body = parser.parse_statements(['name:endwrapper'], drop_needle=True)
return nodes.CallBlock(
self.call_method('_wraper', body),
[],
[],
body
).set_lineno(lineno)
def _wraper(self, body):
return "<a href="http://goo.gl">{0}</a>".format(body)
Но во время выполнения я получаю эту трассировку:
Traceback (most recent call last):
File "/home/project/venv/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/project/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/project/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/project/venv/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/home/project/venv/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/home/project/venv/lib/python2.7/site-packages/rest_framework/views.py", line 489, in dispatch
response = self.handle_exception(exc)
File "/home/project/venv/lib/python2.7/site-packages/rest_framework/views.py", line 449, in handle_exception
self.raise_uncaught_exception(exc)
File "/home/project/venv/lib/python2.7/site-packages/rest_framework/views.py", line 486, in dispatch
response = handler(request, *args, **kwargs)
File "/home/project/sumsv/bgp_app/views/ripe_upload_views.py", line 258, in post
tmp = jinja2.Template(obj.source)
File "/home/project/venv/lib/python2.7/site-packages/jinja2/environment.py", line 945, in __new__
return env.from_string(source, template_class=cls)
File "/home/project/venv/lib/python2.7/site-packages/jinja2/environment.py", line 880, in from_string
return cls.from_code(self, self.compile(source), globals, None)
File "/home/project/venv/lib/python2.7/site-packages/jinja2/environment.py", line 591, in compile
self.handle_exception(exc_info, source_hint=source_hint)
File "/home/project/venv/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "<unknown>", line 2, in template
TemplateSyntaxError: Encountered unknown tag 'wrapper'.
Как я могу решить эту проблему?