Jinja: لا تقوم {٪ set٪} بتعيين var للسياق العام

تم إنشاؤها على ٢٢ نوفمبر ٢٠١٢  ·  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.
نعم ، تم توثيق استخدام "المجموعة" ، ولكن هل تعمل؟

مثالنا:

 {٪ تعيين the_var = 'foo'٪}
 {٪ لـ e في العناصر٪}
 {٪ تعيين the_var = 'نعم'٪} 
 المتغير: {{the_var}}
 {٪ - endfor٪}
 the_var: {{the_var}}

نتيجة:

 the_var: نعم
 the_var: نعم
 the_var: foo

هل يمكن ان تساعدنا؟ شكرا

ال 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.
نعم ، تم توثيق استخدام "المجموعة" ، ولكن هل تعمل؟

مثالنا:

 {٪ تعيين the_var = 'foo'٪}
 {٪ لـ e في العناصر٪}
 {٪ تعيين the_var = 'نعم'٪} 
 المتغير: {{the_var}}
 {٪ - endfor٪}
 the_var: {{the_var}}

نتيجة:

 the_var: نعم
 the_var: نعم
 the_var: foo

هل يمكن ان تساعدنا؟ شكرا

http://stackoverflow.com/questions/4870346/can-a-jinja-variables-scope-extend-beyond-in-an-inner-block و http://stackoverflow.com/questions/9486393/jinja2-change- قيمة المتغير داخل حلقة

لا أفهم حقًا سبب أهمية هذه الاختراقات ، فيجب أن تكون بناء جملة "محلي" أو ما شابه ذلك

يعتبر

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات