Jinja: {% set %}은(λŠ”) μ „μ—­ μ»¨ν…μŠ€νŠΈμ— varλ₯Ό ν• λ‹Ήν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2012λ…„ 11μ›” 22일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: pallets/jinja

μ£Όν˜•:

{% set foo = "bar" %}
foo - {{ foo }}

{% for i in range(2) %}
     for:foo - {{ foo }}
     {% set foo = i %}
     for:foo - {{ foo }}
{% endfor %}

{{ foo }}

{% block test %}
    block:foo - {{ foo }}
    {% set foo = "baz" %}
    block:foo - {{ foo }}
{% endblock %}

foo - {{ foo }}

κ²°κ³Ό:

foo - bar
    for:foo - bar
    for:foo - 0
    for:foo - 0
    for:foo - 1
foo - bar
    block:foo - bar
    block:foo - baz
foo - bar

뭐?

μ „μ—­ λ³€μˆ˜λ₯Ό ν• λ‹Ήν•˜λŠ” 방법을 λ§Œλ“œμ‹­μ‹œμ˜€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ―ΈμΈ νžˆμ½”,

DriverX와 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
예, "set"의 μ‚¬μš©μ΄ λ¬Έμ„œν™”λ˜μ–΄ μžˆμ§€λ§Œ μž‘λ™ν•©λ‹ˆκΉŒ?

우리의 예:

 {% set the_var = 'foo' %}
 {μš”μ†Œ %}의 e에 λŒ€ν•œ %}
 {% set the_var = '예' %} 
 λ³€μˆ˜: {{ the_var }}
 {%- endfor %}
 the_var: {{ the_var }}

κ²°κ³Ό:

 the_var: 예
 the_var: 예
 the_var: ν‘Έ

우리 μ’€ 도와 μ€„μˆ˜μžˆμ–΄? 감사 ν•΄μš”

λͺ¨λ“  4 λŒ“κΈ€

μ’€ 더 μžμ„Έν•œ λ‚΄μš©μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. 이것은 λ‚΄λΆ€μ—μ„œ μΌμ–΄λ‚˜λŠ” 일에 λŒ€ν•œ λŠλ‚Œμ„ μ–»κΈ° μœ„ν•΄ μœ„μ˜ μ½”λ“œκ°€ λ³΄μ΄λŠ” κ²ƒμž…λ‹ˆλ‹€.

from jinja2.runtime import LoopContext, TemplateReference, Macro, Markup, TemplateRuntimeError, missing, concat, escape, markup_join, unicode_join, to_string, identity, TemplateNotFound
name = None

def root(context, environment=environment):
   ...
    l_foo = 'bar'
    context.vars['foo'] = l_foo
    context.exported_vars.add('foo')
    yield u'\nfoo - %s\n\n' % (
        l_foo,
    )
    t_1 = l_foo
    l_i = missing
    for l_i in context.call(l_range, 2):
        if 0: yield None
        yield u'\n     for:foo - %s\n     ' % (
            l_foo,
        )
        l_foo = l_i
        yield u'\n     for:foo - %s\n ' % (
            l_foo,
        )
    l_foo = t_1
    l_i = missing
    yield u'\n\n'
    for event in context.blocks['test'][0](context):
        yield event
    yield u'\n\nfoo - '
    yield to_string(l_foo)

def block_test(context, environment=environment):
    l_foo = context.resolve('foo')
    if 0: yield None
    yield u'\n    block:foo - %s\n    ' % (
        l_foo,
    )
    l_foo = 'baz'
    yield u'\n    block:foo - %s\n' % (
        l_foo,
    )

blocks = {'test': block_test}
debug_info = '2=8&3=12&5=16&6=19&7=21&8=23&11=28&17=31&11=33&12=37&13=39&14=41'

μžμ„Έν•œ λ‚΄μš©μ€:
μ „μ—­: http://jinja.pocoo.org/docs/api/#global -namespace
일반: http://jinja.pocoo.org/docs/templates/#assignments
κ΅¬ν˜„: http://jinja.pocoo.org/docs/api/#jinja2.runtime.Context
또 λ‹€λ₯Έ 쒋은 μ„€λͺ…: http://stackoverflow.com/a/3355029/482864

μ–΄λ–€ 아이디어?

이것은 λ¬Έμ„œν™”λœ λ™μž‘μž…λ‹ˆλ‹€.

λ―ΈμΈ νžˆμ½”,

DriverX와 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
예, "set"의 μ‚¬μš©μ΄ λ¬Έμ„œν™”λ˜μ–΄ μžˆμ§€λ§Œ μž‘λ™ν•©λ‹ˆκΉŒ?

우리의 예:

 {% set the_var = 'foo' %}
 {μš”μ†Œ %}의 e에 λŒ€ν•œ %}
 {% set the_var = '예' %} 
 λ³€μˆ˜: {{ the_var }}
 {%- endfor %}
 the_var: {{ the_var }}

κ²°κ³Ό:

 the_var: 예
 the_var: 예
 the_var: ν‘Έ

우리 μ’€ 도와 μ€„μˆ˜μžˆμ–΄? 감사 ν•΄μš”

http://stackoverflow.com/questions/4870346/can-a-jinja-variables-scope-extend-beyond-in-an-inner-block 및 http://stackoverflow.com/questions/9486393/jinja2-change- 루프 λ‚΄λΆ€μ˜ λ³€μˆ˜ κ°’

λ‚˜λŠ” κ·Έ 해킹이 μ™œ ν•„μš”ν•œμ§€ μ •λ§λ‘œ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. "둜컬 var" ꡬ문 λ˜λŠ” 이와 μœ μ‚¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ¬Έμ•ˆ 인사

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰