Jinja: рдорд▓реНрдЯреАрд▓рд╛рдЗрди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдЙрдкрд╕рд░реНрдЧ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдлрд╝рд░ре░ 2013  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pallets/jinja

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдореЗрдВ - рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реА рдХреЛрдб рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ - рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдЙрдкрд╕рд░реНрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ:

PrintCFunction(linesGlobal, linesLocal) ::= <<
void foo() {
    if (someRuntimeFlag) {
        <linesGlobal>
        if (anotherRuntimeFlag) {
            <linesLocal>
        }
    }
}
>>

рдЬрдм рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ StringTemplate рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдорд▓реНрдЯреАрд▓рд╛рдЗрди рд▓рд╛рдЗрдиреНрд╕ рдЧреНрд▓реЛрдмрд▓ рдФрд░ рд▓рд╛рдЗрдиреНрд╕рд▓реЛрдХрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕, рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрддреНрдкрдиреНрди рд╕реА рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реИ:

void foo() {
    if (someRuntimeFlag) {
        int i;
        i=1;   // <=== whitespace prefix copied in 2nd
        i++;   // <=== and 3rd line
        if (anotherRuntimeFlag) {
            int j=i;
            j++; //  <=== ditto
        }
    }
}

рдореИрдВ Jinja2 рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдБ - рдФрд░ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

#!/usr/bin/env python
from jinja2 import Template

linesGlobal='\n'.join(['int i;', 'i=1;'])
linesLocal='\n'.join(['int j=i;', 'j++;'])

tmpl = Template(u'''\
void foo() {
    if (someRuntimeFlag) {
        {{linesGlobal}}
        if (anotherRuntimeFlag) {
            {{linesLocal}}
        }
    }
}
''')

print tmpl.render(
    linesGlobal=linesGlobal,
    linesLocal=linesLocal)

... рд▓реЗрдХрд┐рди рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рдЗрд╕рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ:

void foo() {
    if (someRuntimeFlag) {
        int i;
i=1;
        if (anotherRuntimeFlag) {
            int j=i;
j++;
        }
    }
}

... рдЬреЛ рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдореИрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдЙрдЪрд┐рдд рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдЙрдкрд╕рд░реНрдЧ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛:

...
if (someRuntimeFlag) {
    {{linesGlobal|indent(8)}}
    if (anotherRuntimeFlag) {
        {{linesLocal|indent(12)}}
    }
}

... рд▓реЗрдХрд┐рди рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдЧрд┐рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ ...

рдХреНрдпрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

YAML рдпрд╛ рдкрд╛рдпрдерди рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рдпрд╣ рдореБрджреНрджрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рднреА рдЖрдпрд╛ рд╣реИ: http://stackoverflow.com/questions/10821539/jinja-keep-indentation-on-include-or-macro

+1

рдкреНрд░рдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднреА рд╕рддреНрдп:

    {{linesGlobal|join('\n')}}

рдпрд╣ рдлрд╝реЙрд░реНрдо рдЙрд╕ рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рдЬреИрд╕рд╛ рдХреЛрдИ рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛ - рдЪреВрдВрдХрд┐ рдЬрд┐рдиреНрдЬрд╛ 2 рдирдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ рдЕрдВрддрд┐рдо рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рд░рд╣реЗрдВред

рдпрд╣ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛! рдпрд╣ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдЖрдЙрдЯрдкреБрдЯ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред

{%+ рдФрд░ {%- рдХреЗ рд╕рдорд╛рди рдПрдХ рдФрд░ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреНрдпреЛрдВ рди рдмрдирд╛рдПрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдЙрд╕ рдкрд░ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ? {%= рдпрд╛ {%| . рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

+1

+1

рдПрдкреАрдЖрдИ рдмреНрд▓реВрдкреНрд░рд┐рдВрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

{% macro entity_one() -%}
{
    "one": 1,
    "two": 2
}
{% endmacro -%}

+ Response 200 (application/json):

        {
            "entity": [
                {{ entity_one() }}
            ]
        }

рдЕрдм рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

+ Response 200 (application/json):

        {
            "entity": [
                {
    "one": 1,
    "two": 2

}

            ]
        }

YAML рдпрд╛ рдкрд╛рдпрдерди рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред

рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдорд┐рд▓ рдЯреЗрдореНрдкрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдЗрд╕ рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЗ рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рдореИрдВ рдмрд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЖрдпрд╛ рдФрд░ рдЧреБрдЧрд▓рд┐рдВрдЧ рдореБрдЭреЗ рдпрд╣рд╛рдВ рд▓рд╛рдпрд╛ред рдХреБрдЫ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЕрдм рддрдХ рдЗрдВрдбреЗрдВрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ

@kaikuchn рдзрдиреНрдпрд╡рд╛рдж, рдпрд╛рд░! рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИрдВред

@kaikuchn , @Cigizmoond-Vyhuholev рджреЛрд╕реНрддреЛрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реВрдВ ... рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢реАрд░реНрд╖ рдкрд░ рдореЗрд░реА рдореВрд▓ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ indent рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдВ - рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд░рд▓ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдЧрд┐рдирдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ ... рдпрджрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЖрдк рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ (рд╕реА, рдкрд╛рдпрдерди, рдЬреЛ рдХреБрдЫ рднреА) рдЖрдк рдмрд╣реБрдд рдЬрд▓реНрджреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ ...

рдлрд┐рд░ рдлрд┐рд░, рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдорддрд▓рдм рдЧрд▓рдд рд╕рдордЭрд╛ рд╣реЛрдЧрд╛... рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╢реАрд░реНрд╖ рдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдореЗрд░реА рдореВрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ? рдпрд╛рдиреА Jinja2 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ? рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ ...

if (someRuntimeFlag) {
    {{linesGlobal|indent(8)}}
    if (anotherRuntimeFlag) {
        {{linesLocal|indent(12)}}
    }
}

... рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ "8" рдФрд░ "12" рдЧрд┐рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдХреЛрдб рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, StringTemplate рдореЗрдВ...

PrintCFunction(linesGlobal, linesLocal) ::= <<
void foo() {
    if (someRuntimeFlag) {
        <linesGlobal>
        if (anotherRuntimeFlag) {
            <linesLocal>
        }
    }
}
>>

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ #919 рдПрдХ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреАрдЖрд░ рдХреЗ рдХреБрдЫ рдкреНрд░рдореБрдЦ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдЗрдВрдЬрди рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЦреНрдп рджреЗрд╡ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╕рдореБрджрд╛рдп рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреАрдЖрд░ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЕрдВрдЧреВрдареЗ рдХреЗ рд╕рд╛рде рдЦреБрд▓рд╛ рдореБрджреНрджрд╛ рд╣реИ) рдореИрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдФрд░ рд╢рд╛рдпрдж рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рднреА рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реНрддрд░ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ indent рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг:

{{field.type}} {{field.name}}; {{field.comment|indent(??)}}

рдЬрд╣рд╛рдВ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реНрддрд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рд╡рд╣ рдкрд╣рд▓реЗ рджреЛ рдорд╛рди рдХреА рд▓рдВрдмрд╛рдИ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдореЗрд░реА рдПрдХ рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рд╣реИред рдмреНрд▓реЙрдХ рдШреЛрд╖рдгрд╛ рдореЗрдВ рд▓реЗрдлреНрдЯ-рдЯреНрд░рд┐рдорд┐рдВрдЧ рдкреНрд░рдердо рд╕реНрддрд░ рдХреЗ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдЙрджрд╛рд╣рд░рдг:

{%- macro some_yaml_block(sub_block) ~%}
  label indented with how many spaces: 2
  amount of spaces that will be trimmed due to that "~" char above: 2
  {%- if sub_block ~%}
    "yay! we can indent ifs!": true
    the minimal indent in this if block is 2, so:
      this extra-indented value is still indented properly
  {%- endif %}
{%- endmacro -%}

now we invoke that here:
  {{ some_yaml_block(true) }}

рдкреНрд░рддрд┐рдкрд╛рджрди рд╣реЛрдЧрд╛:

now we invoke that here:
  label indented with how many spaces: 2
  amount of spaces that will be trimmed due to that "~" char above: 2
  "yay! we can indent ifs!": true
  the minimal indent in this if block is 2, so:
    this extra-indented value is still indented properly

рдореВрд▓ рд░реВрдк рд╕реЗ, ~%} рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рдЦрддреНрдо рдХрд░рддреЗ рд╕рдордп, рдЬрд┐рдВрдЬрд╛ рд╣реЛрдЧрд╛:

  1. рдпрджрд┐ рдпрд╣ рдПрдХ EOL рдЕрдиреБрдХреНрд░рдо рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ newline_sequence рдкрд░реНрдпрд╛рд╡рд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
  2. рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред
  3. рдЧрдгрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рддрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рд╡рд░реНрдг рдЙрди рд░реЗрдВрдбрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЙрдкрд╕рд░реНрдЧ рдХрд░рддреЗ рд╣реИрдВред
  4. рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрдЯреНрдЯреА рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдкрдХреЛ, рдмрд╛рдж рдореЗрдВ, рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕реЗ some_yaml_block|indent рддрд░рд╣ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдЗрдВрдбреЗрдВрдЯ рдХреЛ рдмреНрд▓реЙрдХ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрдк рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдмреНрд▓реЙрдХ рд▓рдЧрд╛рддрд╛рд░ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

nalzok picture nalzok  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hvnsweeting picture hvnsweeting  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mtrstudio picture mtrstudio  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

navilan picture navilan  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

humiaozuzu picture humiaozuzu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ