[IMP] guard for None enum, remove 1 level of indent
This commit is contained in:
@@ -354,41 +354,41 @@ class QWeb(orm.AbstractModel):
|
||||
def render_tag_foreach(self, element, template_attributes, generated_attributes, qwebcontext):
|
||||
expr = template_attributes["foreach"]
|
||||
enum = self.eval_object(expr, qwebcontext)
|
||||
if enum is not None:
|
||||
varname = template_attributes['as'].replace('.', '_')
|
||||
copy_qwebcontext = qwebcontext.copy()
|
||||
size = -1
|
||||
if isinstance(enum, collections.Sized):
|
||||
size = len(enum)
|
||||
copy_qwebcontext["%s_size" % varname] = size
|
||||
copy_qwebcontext["%s_all" % varname] = enum
|
||||
ru = []
|
||||
for index, item in enumerate(enum):
|
||||
copy_qwebcontext.update({
|
||||
varname: item,
|
||||
'%s_value' % varname: item,
|
||||
'%s_index' % varname: index,
|
||||
'%s_first' % varname: index == 0,
|
||||
'%s_last' % varname: index + 1 == size,
|
||||
})
|
||||
if index % 2:
|
||||
copy_qwebcontext.update({
|
||||
'%s_parity' % varname: 'odd',
|
||||
'%s_even' % varname: False,
|
||||
'%s_odd' % varname: True,
|
||||
})
|
||||
else:
|
||||
copy_qwebcontext.update({
|
||||
'%s_parity' % varname: 'even',
|
||||
'%s_even' % varname: True,
|
||||
'%s_odd' % varname: False,
|
||||
})
|
||||
ru.append(self.render_element(element, template_attributes, generated_attributes, copy_qwebcontext))
|
||||
return "".join(ru)
|
||||
else:
|
||||
if enum is None:
|
||||
template = qwebcontext.get('__template__')
|
||||
raise QWebException("foreach enumerator %r is not defined while rendering template %r" % (expr, template), template=template)
|
||||
|
||||
varname = template_attributes['as'].replace('.', '_')
|
||||
copy_qwebcontext = qwebcontext.copy()
|
||||
size = -1
|
||||
if isinstance(enum, collections.Sized):
|
||||
size = len(enum)
|
||||
copy_qwebcontext["%s_size" % varname] = size
|
||||
copy_qwebcontext["%s_all" % varname] = enum
|
||||
ru = []
|
||||
for index, item in enumerate(enum):
|
||||
copy_qwebcontext.update({
|
||||
varname: item,
|
||||
'%s_value' % varname: item,
|
||||
'%s_index' % varname: index,
|
||||
'%s_first' % varname: index == 0,
|
||||
'%s_last' % varname: index + 1 == size,
|
||||
})
|
||||
if index % 2:
|
||||
copy_qwebcontext.update({
|
||||
'%s_parity' % varname: 'odd',
|
||||
'%s_even' % varname: False,
|
||||
'%s_odd' % varname: True,
|
||||
})
|
||||
else:
|
||||
copy_qwebcontext.update({
|
||||
'%s_parity' % varname: 'even',
|
||||
'%s_even' % varname: True,
|
||||
'%s_odd' % varname: False,
|
||||
})
|
||||
ru.append(self.render_element(element, template_attributes, generated_attributes, copy_qwebcontext))
|
||||
return "".join(ru)
|
||||
|
||||
def render_tag_if(self, element, template_attributes, generated_attributes, qwebcontext):
|
||||
if self.eval_bool(template_attributes["if"], qwebcontext):
|
||||
return self.render_element(element, template_attributes, generated_attributes, qwebcontext)
|
||||
|
||||
Reference in New Issue
Block a user