templatetags: make |get work with lazy vars (#43577)
This commit is contained in:
parent
ee2adbbf49
commit
c503f7336c
|
@ -15,6 +15,8 @@ from wcs.qommon.substitution import CompatibilityNamesDict
|
||||||
from wcs.qommon.template import Template, TemplateError
|
from wcs.qommon.template import Template, TemplateError
|
||||||
from wcs.conditions import Condition
|
from wcs.conditions import Condition
|
||||||
from wcs.variables import LazyFormData
|
from wcs.variables import LazyFormData
|
||||||
|
from wcs.formdef import FormDef
|
||||||
|
from wcs import fields
|
||||||
|
|
||||||
from utilities import create_temporary_pub, clean_temporary_pub
|
from utilities import create_temporary_pub, clean_temporary_pub
|
||||||
|
|
||||||
|
@ -578,6 +580,36 @@ def test_get_filter():
|
||||||
assert tmpl.render({'foo': ['bar', 'baz']}) == 'bar'
|
assert tmpl.render({'foo': ['bar', 'baz']}) == 'bar'
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_on_lazy_var():
|
||||||
|
FormDef.wipe()
|
||||||
|
formdef = FormDef()
|
||||||
|
formdef.name = 'lazy'
|
||||||
|
formdef.fields = [
|
||||||
|
fields.StringField(id='0', label='string', varname='foo'),
|
||||||
|
fields.StringField(id='1', label='string', varname='bar'),
|
||||||
|
]
|
||||||
|
formdef.store()
|
||||||
|
formdef.data_class().wipe()
|
||||||
|
formdata = formdef.data_class()()
|
||||||
|
formdata.just_created()
|
||||||
|
formdata.data = {
|
||||||
|
'0': 'bar',
|
||||||
|
'1': '1',
|
||||||
|
}
|
||||||
|
formdata.store()
|
||||||
|
|
||||||
|
context = CompatibilityNamesDict({
|
||||||
|
'form': LazyFormData(formdata),
|
||||||
|
'foo_dict': {'bar': 'baz'},
|
||||||
|
'foo_array': ['bar', 'baz'],
|
||||||
|
})
|
||||||
|
tmpl = Template('{{ foo_dict|get:form_var_foo }}')
|
||||||
|
assert tmpl.render(context) == 'baz'
|
||||||
|
|
||||||
|
tmpl = Template('{{ foo_array|get:form_var_bar }}')
|
||||||
|
assert tmpl.render(context) == 'baz'
|
||||||
|
|
||||||
|
|
||||||
def test_reproj():
|
def test_reproj():
|
||||||
|
|
||||||
class MockFormData(object):
|
class MockFormData(object):
|
||||||
|
|
|
@ -48,8 +48,15 @@ register = template.Library()
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def get(mapping, key):
|
def get(mapping, key):
|
||||||
|
if hasattr(key, 'get_value'):
|
||||||
|
key = key.get_value() # unlazy
|
||||||
if hasattr(mapping, 'get'):
|
if hasattr(mapping, 'get'):
|
||||||
return mapping.get(key)
|
return mapping.get(key)
|
||||||
|
if isinstance(mapping, (tuple, list)):
|
||||||
|
try:
|
||||||
|
key = int(key)
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
pass
|
||||||
return mapping[key]
|
return mapping[key]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue