Новый тег-обертка для Jinja2 - PullRequest
0 голосов
/ 27 февраля 2019

Мне нужно создать новый тег для 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'.

Как я могу решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...