Рассылка с компиляцией Jinja2 после включения

StackOverflow https://stackoverflow.com/questions/4294837

  •  28-09-2019
  •  | 
  •  

Вопрос

В jinja2, возможно ли иметь Node от AST Render ведь include Заявления завершены?

Это ключ кусок раствора для большей головоломки.

Пример кода:

хитрый

from jinja2 import nodes, Environment, FileSystemLoader
from jinja2.ext import Extension

class XExtension(Extension):
    tags = set(['x', 'get_x'])

    def __init__(self, environment):
        super(XExtension, self).__init__(environment)
        environment.extend(
            x = 0,
        )

    def parse(self, parser):
        tag = parser.stream.next()
        return getattr(self, "_%s" % str(tag))(parser, tag)

   def _get_x(self, parser, tag):
        """ Return the output """
        return nodes.Const(self.environment.x)

   def _x(self, parser, tag):
        """ Add an x """
        self.environment.x += 1
        return nodes.Const('<!-- Adding an X -->')

env = Environment(
    loader      = FileSystemLoader('.'),
    extensions  = [XExtension],
    )

template = env.get_template('x.html')
print template.render()

x.html.

Xx {% x %} Xx {% x %}
{% include "y.html" %}
Xs xes: {% get_x %}

y.html.

Yx {% x %}
Ys xes: {% get_x %}

Вывод

Xx <!-- Adding an X --> Xx <!-- Adding an X -->
Yx <!-- Adding an X -->
Ys xes:3
Xs xes 2

Как можно было бы возможно иметь Xs xes подсчитать х в y.html, что это поведение, которое я желаю и ожидаю?

Другими словами, есть ли способ отложить разбор или уравновешивание текста, возвращаемого из _get_x() в x.html?

Большое спасибо за чтение.

С уважением,

Брайан

Это было полезно?

Решение

Jinja2 делает потоковое изменение данных шаблона. Шаблон оценивается инструкция по эксплуатации в поток меньших струн, которые приносятся в реальную строку Unicode render() метод. Однако вы также можете получить поток, позвонив в generate() вместо render().

С некоторыми внутриполосными сигнализациями и постпроцессией потока можно, вероятно, смогут реализовать что-то подобное, но оно против способа того, как Jinja2 был спроектирован так, чтобы оно могло сломаться и совершенно не поддерживаться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top