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.conditions import Condition
|
||||
from wcs.variables import LazyFormData
|
||||
from wcs.formdef import FormDef
|
||||
from wcs import fields
|
||||
|
||||
from utilities import create_temporary_pub, clean_temporary_pub
|
||||
|
||||
|
@ -578,6 +580,36 @@ def test_get_filter():
|
|||
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():
|
||||
|
||||
class MockFormData(object):
|
||||
|
|
|
@ -48,8 +48,15 @@ register = template.Library()
|
|||
|
||||
@register.filter
|
||||
def get(mapping, key):
|
||||
if hasattr(key, 'get_value'):
|
||||
key = key.get_value() # unlazy
|
||||
if hasattr(mapping, 'get'):
|
||||
return mapping.get(key)
|
||||
if isinstance(mapping, (tuple, list)):
|
||||
try:
|
||||
key = int(key)
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
return mapping[key]
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue