2012-05-30 2 views
15

Мне интересно, есть ли способ сохранить отступ с jinja при добавлении include или макроса внутри файла. Я хотел бы использовать jinja для создания файла кода. Примером может бытьJinja keep indentation on include or macro

Файл: class.html

class MyClass: 
    def someOp(): 
     pass 

    {% include "someOp.html" %} 

Файл: someOp.html

def someOp2(): 
    pass 

Результат шаблона должен быть:

class MyClass: 
    def someOp(): 
     pass 

    def someOp2(): 
     pass 

Если какой-либо способ сделать jinja добавить отступ перед тегом include для каждой строки в включенном файле? Или есть ли способ настроить jinja для этого?

+0

Это то, что я также хотел бы увидеть. –

ответ

13

Один из способов, чтобы обернуть включаемые в макросе, то потому, что макрос является функцией, его выход может быть пропущен через отступ фильтр:

class MyClass: 
    def someOp(): 
     pass 

    {% macro someop() %}{% include "someOp.html" %}{% endmacro %} 
    {{ someop()|indent }} 

По умолчанию «отступа» отступы 4 пробела и делает не отступ первой строки, вы можете использовать, например, 'indent (8)' далее, см. http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters.

Если то, что вы включаете, определяется как макрос для начала, тогда дополнительный макрос оболочки не нужен, и вы можете перейти прямо к использованию фильтра отступа.

+16

Спасибо за ответ, похоже, похоже на то, что мне нужно, но могу ли я использовать уровень отступа строки, на которой он находится (вместо явного указания уровня)? – Razvi